#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; void Main() { int N,H; cin >> N >> H; vector A(N),B(N); for(int i = 0;i < N;i++) { cin >> A[i]; } for(int i = 0;i < N;i++) { cin >> B[i]; } vector SA(N + 1); vector SB(N + 1); for(int i = 0;i < N;i++) { SA[i + 1] = SA[i] + A[i]; SB[i + 1] = SB[i] + B[i]; } using i128 = __int128_t; vector SSB(N + 1); for(int i = 0;i < N;i++) { SSB[i + 1] = SSB[i] + (long long) (i + 1) * B[i]; } long long ans = 0; for(int i = 0;i < N;i++) { int ok = i,ng = N + 1; while(ng - ok > 1) { int mid = (ok + ng) / 2; i128 cur = 0; cur += SSB[mid] - SSB[i]; cur -= (i128) (SB[mid] - SB[i]) * i; if(cur <= H) { ok = mid; } else { ng = mid; } } ans = max(ans,SA[ok] - SA[i]); } cout << ans << "\n"; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int tt = 1; /* cin >> tt; */ while(tt--) Main(); }