import sys # input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### n = ni() b = ni() c = na() s = na() idx = sorted(range(n), key = lambda i: c[i]) c = [c[i] for i in idx] s = [s[i] for i in idx] """ """ rui = [0] * (n + 1) ruis = [0] * (n + 1) for i in range(n): rui[i+1] = rui[i] + c[i] * s[i] ruis[i+1] = ruis[i] + s[i] from bisect import bisect_left # print(c, s) # print(rui, ruis) ans = 0 x = 0 for i in range(n): X = (c[i] - 1) * s[i] + b z = bisect_left(rui, X) # print(i, z, b + c[i] * s[i] - rui[z-1] if z < len(rui) else 10 ** 18) if z == len(rui): ans = max(ans, ruis[-1]) elif z > i: # print("!", i, z, ruis[z-1],(X - rui[z-1]) // c[z-1]) ans = max(ans, ruis[z-1] + (X - rui[z-1]) // c[z-1]) print(ans)