Limak is a little polar bear. He likes nice strings — strings of length *n*, consisting of lowercase English letters only.

The distance between two letters is defined as the difference between their positions in the alphabet. For example, <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/b94160a4d1c955e1b6cd4a0fe139f103c35ac73f.png" style="max-width: 100.0%;max-height: 100.0%;"/>, and <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/7a05c5ca27b2dc782643b883e8a0bae7e3298e4f.png" style="max-width: 100.0%;max-height: 100.0%;"/>.

Also, the distance between two nice strings is defined as the sum of distances of corresponding letters. For example, <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/77f313bb7e669a438377b73e0dcdc89dc88f4a7a.png" style="max-width: 100.0%;max-height: 100.0%;"/>, and <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/51de79586a12d9aa6a55105517514bcd173984a8.png" style="max-width: 100.0%;max-height: 100.0%;"/>.

Limak gives you a nice string *s* and an integer *k*. He challenges you to find any nice string *s*' that <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/586a7bce2dc944b81b116fca51344694db717b8b.png" style="max-width: 100.0%;max-height: 100.0%;"/>. Find any *s*' satisfying the given conditions, or print "-1" if it's impossible to do so.

As input/output can reach huge size it is recommended to use fast input/output methods: for example, prefer to use gets/scanf/printf instead of getline/cin/cout in C++, prefer to use BufferedReader/PrintWriter instead of Scanner/System.out in Java.
The first line contains two integers *n* and *k* (1 ≤ *n* ≤ 10<sup class="upper-index">5</sup>, 0 ≤ *k* ≤ 10<sup class="upper-index">6</sup>).

The second line contains a string *s* of length *n*, consisting of lowercase English letters.
none
4 26
bear
zcar
2 7
af
hf
3 1000
hey
-1
5 50
kzsij
zaiij
5 500
vsdxg
-1
1 0
a
a
1 1
g
f
1 25
r
-1
1 15
o
-1
10 100
addaiyssyp
zzzzcyssyp
50 100
tewducenaqgpilgftjcmzttrgebnyldwfgbtttrygaiqtkgbjb
azazecenaqgpilgftjcmzttrgebnyldwfgbtttrygaiqtkgbjb
2 1
zz
yz
8 8
abcdefgh
ibcdefgh
1 25
z
a
1 24
z
b
1 24
y
a
2 49
zz
ab
1 26
a
-1
1 25
a
z
4 17
rzsq
azsq
69 1701
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzy
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaax
2 9
bc
kc
2 48
ab
zy
1 8
c
k
2 25
yd
ac
5 24
izrqp
zsrqp
1 13
n
a
5 21
fmmqh
zlmqh

// -------------------------------------ajeet gupta ---------------------------------------------
#include<iostream>
#include<cmath>
#include<bits/stdc++.h>
#include<vector>
#include<algorithm>
#include<math.h>                                                                                 
#include<string>
#include<unordered_set>
#include<unordered_map>
#include<cstring>
#include<map>
#include<stack>
#include<set>
#include<queue>
#include <deque>
#include<ext/pb_ds/assoc_container.hpp>  
#include<ext/pb_ds/tree_policy.hpp>  

// #define rep(i,n) for (int i = 0; i < (n); ++i)
const long long INF = 1ll << 32;



 
// for iterator (*it).first == it->first for maps
// A TO Z --> 65 TO 90 ,  a to z --> 97 to 122
// #define int               long  long
// #define INF               1e18
#define nline             "\n"
#define sl                s.length()
#define pb                push_back               
#define fr(a,b)           for(int i = a; i < b; i++)
#define rep(i,a,b)        for(int i = a; i < b; i++)
#define mod               1000000007 
// #define all(x)            (x).begin(), (x).end()
#define prDouble(x)       cout << fixed << setprecision(10) << x
#define triplet           pair<ll,pair<ll,ll>>
#define goog(tno)         cout << "Case #" << tno <<": "
#define fast_io           ios_base::sync_with_stdio(false);cin.tie(NULL)
#define read(x)           int x; cin >> x
#define show(x)           cout<<x<<endl;
#define all(v)            (v).begin(), (v).end()
const int M = 1e9+7;

/* 
sum upto n = (n*(n+1))/2 
sum upto n-1 = (n*(n-1)/2)  
(a+b)%M = ( (a%M) + (b%M) )% M
(a*b)%M = ( (a%M) * (b%M) )% M
(a-b)%M = ( (a%M) - (b%M) + M)% M  // extra +M for making positve
*/

using namespace std;
// using namespace __gnu_pbds;
// typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds; // find_by_order, order_of_key


typedef long long ll;
typedef unsigned long long ull;
typedef unordered_map<ll, bool> ump;
typedef  priority_queue<int, vector<int>, greater<int> > pq;  // MIN HEAP 


#ifndef ONLINE_JUDGE
#define debug(x) cerr <<#x <<" ";_print(x); cerr<<nline;
#else
#define debug(x)
#endif

// void _print(int a ){ cerr<<a; }
void _print(string a ){ cerr<<a; }
// void _print(long long a ){ cerr<<a; }
void _print(bool a ){ cerr<<a; }  
void _print(char a ){ cerr<<a; }

template<class T> void _print(vector<T> v1){ cerr<<"[ "; for(T i:v1){_print(i);cerr<<" ";}cerr<<"]";}
template<class T> void _print(set<T> s1){cerr<<"[ ";for(T i:s1){_print(i);cerr<<" ";}cerr<<"]";}

void debug_gen()
{
    #ifndef ONLINE_JUDGE
    freopen("error.txt", "w", stderr);
    #endif
}

void init_code(){
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif 
}

// void swap(int a, int b)
// {
//    int temp = a;
//    a=b;
//    b = temp;
// }

void printpair(vector<pair<ll,ll>> &v)
{
   for(int i=0; i<v.size(); ++i)
   {
      cout<<v[i].first<<" "<<v[i].second<<endl;
   }
   cout<<endl;


}

// finding gcd using long division menthod using RECURSION
int GCD(int a, int b)
{
   if(b==0)    
   {
      return a;
   }
   return GCD(b, a%b);
}
const int N = 1008;
vector<int> prime(N+1);
vector<bool> isprime(N+1, true);


// void seve()
// {
//     isprime[1] = false;
//     for(int i=2; i<=1000; ++i)
//     {
//         if(isprime[i])
//             {
//                 prime.push_back(i);
//                 for(int j = i*i; j<=N; j+=i)
//                 {
//                     isprime[j] =false;
//                 }

//             }
//     }

// }

int binary_expo(int a , int b, int M)
{
   if(b==0)return 1;
   int c = binary_expo(a,b/2,M);
   if(b%2==0)
   {
      return c*c%M;
   }
   return c*c%M*a%M;
}
 
 int lcm(int a, int b){
  int x = __gcd(a,b);
  return a*b/x;
 }


set <int > s;
bool prime_square[10000];
void sieve(){
   for(int i =2; i<10000; ++i)
   {
      if(!prime_square[i])
      {
         s.insert(i*i);
         for(int j= i*i; j<1000000; j+=i )
         {
            prime_square[j]= true;

         }
      }
   }
   
}
 map<int,int> mp;

void reverseStr(string& str)
{
    int n = str.length();
  
    // Swap character starting from two
    // corners
    for (int i = 0; i < n / 2; i++)
        swap(str[i], str[n - i - 1]);
}

// int kadane(vector<int> &v, int start, int end)
// {
//     int sum = 0;
//     int mx = -1e18;
//     for(int i =start; i<end; ++i)
//     {
//        sum+=v[i];
//        if(v[i]>sum)
//        {
//          sum = v[i];
//        }
//        mx = max(mx,sum);
//     }
//     return mx;
// }

void solve()
{
      
 int n,k;
 cin >> n >> k;
 string s;
 cin >> s;
 
 for(int i=0; i<n; ++i )
 {
    if(s[i]+k<='z')
    {
       s[i]+=k;
       k =0;
    }else if(s[i] - k >= 'a'){
      s[i]-=k;
      k = 0;
    }else{
      int a = abs(s[i] - 'z');
      int b = abs(s[i] - 'a');

      if(b<=a)
      {
          k = k-a;
          s[i] = 'z';
      }else{
         k = k -b;
         s[i] = 'a';
      }

    }
 }

 if(k)
 {
    cout<<-1<<nline;
 }else {
   cout<<s<<nline;
 }


   
}

void solve2()
{
; 
}


// int main() 
signed main()
{
   // TOTAL SUBARRAY OF N DISTINCT ELEMENT IS (N*(N+1)/2)
   debug_gen();
   fast_io;
   init_code();
   // seve();
   // int tt
   // cin>>tt; 
   // while(tt--)
   // {             
   // solve();
   // } 
   solve();
 
  



   }
