n = int(input()) b = int(input()) A = list(map(int, input().split())) B = list(map(int, input().split())) C = [0] * (10**5+1) D = [0] * (10**5+1) for i in range(n): D[A[i]] += B[i] C[A[i]] = max(C[A[i]], B[i]) t = b tmp = 0 for i in range(1, 10**5+1): if t < D[i] * i: idx = i break t -= D[i] * i tmp = max(tmp, (i-1) * C[i]) t = b + tmp ans0 = 0 for i in range(1, 10**5+1): s = min(D[i], t // i) t -= s * i ans0 += s ans1 = 0 D[1] += C[idx] D[idx] -= C[idx] t = b for i in range(1, 10**5+1): s = min(D[i], t // i) t -= s * i ans1 += s D[1] -= C[idx] D[idx] += C[idx] ma = max(C[idx+1: 10**5+1]) D[1] += ma ans2 = 0 t = b for i in range(1, 10**5+1): s = min(D[i], t // i) t -= s * i ans2 += s print(max(ans0, ans1, ans2))