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 print(max(ans0, ans1))