n = int(input()) b = int(input()) c = list(map(int,input().split())) s = list(map(int,input().split())) x = [[c[i],-s[i]] for i in range(n)] x.sort(reverse=True) out = 0 m = 0 ans = 0 while b and len(x): w,p = x.pop() p *= -1 if w*p <= b: m = max(m,w*p-p) b -= w*p out += p else: bb = b-min(b,p) ans = out+min(b,p) aa = 0 cc = 0 for i in range(len(x)-1,-1,-1): if aa-x[i][0]*x[i][1] <= bb: aa -= x[i][0]*x[i][1] cc -= x[i][1] else: cc += (bb-aa)//x[i][0] break ans = ans+cc x.append([w,-p]) b += m aa = 0 cc = 0 for i in range(len(x)-1,-1,-1): if aa-x[i][0]*x[i][1] <= b: aa -= x[i][0]*x[i][1] cc -= x[i][1] else: cc += (b-aa)//x[i][0] break ans = max(ans,out+cc) break ans = max(ans,out) print(ans)