#include // #include // #include using namespace std; // using namespace atcoder; // using bint = boost::multiprecision::cpp_int; using ll = long long; using ull = unsigned long long; using P = pair; using vi = vector; using vvi = vector; using vvvi = vector; #define rep(i,n) for(ll i = 0;i < (ll)n;i++) #define ALL(x) (x).begin(),(x).end() #define sz(c) ((ll)(c).size()) #define LB(A,x) (int)(lower_bound(A.begin(),A.end(),x)-A.begin()) // #define MOD 1000000007 #define MOD 998244353 templateusing min_priority_queue=priority_queue,greater>; templateostream&operator<<(ostream&os,vector&v){for(int i = 0;i < v.size();i++)os<istream&operator>>(istream&is,vector&v){for(T&in:v)is>>in;return is;} templateostream&operator<<(ostream&os,pair&p){os<istream&operator>>(istream&is,pair&p){is>>p.first>>p.second;return is;} int main(){ ios_base::sync_with_stdio(0), cin.tie(0); ll n,H; cin >> n >> H; vi a(n),b(n); cin >> a >> b; vector<__int128_t> sa(n+1,0),sb(n+1,0),ssb(n+1,0); rep(i,n)sa[i+1] = sa[i] + a[i]; rep(i,n)sb[i+1] = sb[i] + b[i]; rep(i,n)ssb[i+1] = ssb[i] + sb[i+1]; ll res = 0; rep(i,n){ ll l = 0,r = n-i+1; while(r-l > 1){ ll mid = (l+r)/2; __int128_t k = ssb[i+mid]-ssb[i] - sb[i]*mid; if(k <= H)l = mid; else r = mid; } res = max(res,sa[i+l]-sa[i]); } cout << res << "\n"; return 0; }