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

#  If you win, you live. You cannot win unless you fight.

from sys import stdin
input=stdin.readline
import heapq
import string
rd=lambda: map(lambda s: int(s), input().strip().split())
ri=lambda: int(input())
rs=lambda :input().strip()
from collections import defaultdict as unsafedict,deque,Counter as unsafeCounter
from bisect import bisect_left as bl, bisect_right as br
from random import randint
from math import gcd, floor,log2,factorial,radians,sin,cos
random = randint(1, 10 ** 9)
mod=10**9+7
def ceil(a,b):
	return (a+b-1)//b
class myDict:
	def __init__(self,func):
		self.RANDOM = randint(0,1<<32)
		self.default=func
		self.dict={}
	def __getitem__(self,key):
		myKey=self.RANDOM^key
		if myKey not in self.dict:
			self.dict[myKey]=self.default()
		return self.dict[myKey]
	def get(self,key,default):
		myKey=self.RANDOM^key
		if myKey not in self.dict:
			return default
		return self.dict[myKey]
	def __setitem__(self,key,item):
		myKey=self.RANDOM^key
		self.dict[myKey]=item
	def getKeys(self):
		return [self.RANDOM^i for i in self.dict]
	def __str__(self):
		return f'{[(self.RANDOM^i,self.dict[i]) for i in self.dict]}'

al=string.ascii_lowercase
def geto(a):
	return ord(a)-ord('a')
n,k=rd()
s=rs()
ans=['']*n
for i in range(n):

	if k==0:
		ans[i]=s[i]
	x=geto(s[i])
	if x>k:
		ans[i]=al[x-k]
		k=0
		continue
	y=25-geto(s[i])
	if y>k:
		ans[i]=al[x+k]
		k=0
		continue
	if x>y:
		ans[i]='a'
		k-=x
	else:
		ans[i]="z"
		k-=y
if k:
	print(-1)
else:

	print(*ans,sep='')
