#pragma GCC optimize("Ofast") #include using namespace std; typedef long long int ll; typedef unsigned long long int ull; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll myRand(ll B) { return (ull)rng() % B; } inline double time() { return static_cast(chrono::duration_cast(chrono::steady_clock::now().time_since_epoch()).count()) * 1e-9; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int n; cin >> n; ll H; cin >> 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]; } ll res = 0; int r = 0; ll sum = 0, cost = 0, score = 0; for (int i = 0; i < n; ++i) { while (r < n and cost+b[r]*(r-i+1) <= H) { cost += b[r]*(r-i+1); sum += b[r]; score += a[r]; r += 1; } res = max(res, score); if (i == r) { r += 1; } else { cost -= sum; sum -= b[i]; score -= a[i]; } } cout << res << endl; }