灵梦的字符串问题
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}你这家伙,是杀人犯呢。——蕾米莉亚·斯卡蕾特

\hspace{15pt}一个人的话又不是大量屠杀,所以没关系。——博丽灵梦
\hspace{15pt}退治完妖怪,灵梦从红魔馆抢来一个字符串。这是一个长度为 n,仅由小写字母构成的字符串 s,下标从 1 开始。灵梦有 m 点灵力,计划消耗灵力对字符串进行至多一次修改操作,使最终得到的字符串字典序最小。操作分为两步:
\hspace{23pt}\bullet\,第一步,从字符串 s 中选取若干位置。对于每个被选中的位置 i,需要消耗 a_i 点灵力。
\hspace{23pt}\bullet\,第二步,对于每个选中的位置,将对应字符复制一次,新复制的字符紧接原字符之后插入。例如,对于字符串 s = \texttt{,我们已经选中了橙色的两个位置,复制操作后,得到 s' =\texttt{
\hspace{15pt}灵梦的灵力值有限,所以她希望你帮她计算出,在消耗灵力值不超过 m 的情况下,最后能够得到的字典序最小的字符串是什么。

\hspace{15pt}从字符串的第一个字符开始逐个比较,直至发现第一个不同的位置,比较这个位置字符的字母表顺序,字母序较小的字符串字典序也较小;如果比较到其中一个字符串的结尾时依旧全部相同,则较短的字符串字典序更小。

输入描述:

\hspace{15pt}第一行输入两个整数 n,m \left(1\leq n \leq 2\times 10^5;\ 1\leq m \leq 10^{18}\right) 代表字符串的长度、灵梦的灵力值。 
\hspace{15pt}第二行输入一个长度为 n,仅有小写字母构成的字符串 s
\hspace{15pt}第三行输入 n 个整数 a_1,a_2,\dots,a_n \left(1\leq a_i \leq 10^9\right),其中,第 i 个整数 a_i 代表选中位置 i 需要消耗的灵力值。

输出描述:

\hspace{15pt}输出一个字符串,代表最后能够得到的字典序最小的字符串。
示例1

输入

复制
3 1
aba
1 1 1

输出

复制
aaba

说明

\hspace{15pt}在这个样例中,一共有三种不同的选择方案:
\hspace{23pt}\bullet\,选中第 1 个位置,消耗 1 点灵力,得到 s' = \texttt{
\hspace{23pt}\bullet\,选中第 2 个位置,消耗 1 点灵力,得到 s' = \texttt{
\hspace{23pt}\bullet\,选中第 3 个位置,消耗 1 点灵力,得到 s' = \texttt{
\hspace{15pt}显然,最后能够得到的字典序最小的字符串是 \texttt{
示例2

输入

复制
7 10
aabacaa
3 3 3 2 1 2 1

输出

复制
aaaabaacaa