from itertools import accumulate import sys def printe(*args, end="\n", **kwargs): print(*args, end=end, file=sys.stderr, **kwargs) def main(): N, H = map(int, input().split()) A = list(map(int, input().split())) B = list(map(int, input().split())) A_accum = list(accumulate(A)) B_accum = list(accumulate(B, initial=0)) max_satisfied = 0 L = 0 R = 0 cur_tired = 0 cur_satisfied = 0 while L < N: if R == N: max_satisfied = max(max_satisfied, cur_satisfied) break if cur_tired + B[R] * (R - L + 1) <= H: cur_tired += B[R] * (R - L + 1) cur_satisfied += A[R] R += 1 continue max_satisfied = max(max_satisfied, cur_satisfied) if L < R: cur_satisfied -= A[L] cur_tired -= B_accum[R] - B_accum[L] L += 1 else: L += 1 R += 1 # cur_satisfied += A[R] # cur_tired += B[R] * (R - L) # R += 1 # L += 1 print(max_satisfied) if __name__ == "__main__": main()