#include using namespace std; #define rep(i,a,b) for(ll i=a;i=b;i--) #define ll long long #define ull unsigned long long #define ld long double #define bl __int128_t #define fi first #define se second #define vel vector #define vvel vector> #define vvepll vector #define pll pair #define vepll vector #define ves vector #define vem vector #define vvem vector #define bl __int128_t #define cleout(i) cout<using PQ=priority_queue,greater>; // 上 右 下 左 vector dx={ -1, 0, 1, 0 }; vector dy={ 0, 1, 0, -1 }; vector ddx={ 1, 1, 1, 0, -1, -1, -1, 0 }; vector ddy={ 1, 0, -1, -1, -1, 0, 1, 1 }; ll N, K, M, L, R, T, Q, H, W, i, j, l, r; ll x, y, z; unsigned long long q; string S; long double k; ll inf=1000000000000000000;//1e18 // inf=1e9+7; // LLONG_MAX //mt19937_64 rng((ull) chrono::steady_clock::now().time_since_epoch().count()); //[x^M]1/(1-x)^N=comb(N-1+M,M) void _solve(){ cin>>N; ll B; cin>>B; vel c(N); vel s(N); rep(i,0,N)cin>>c[i]; rep(i,0,N)cin>>s[i]; map ma; rep(i,0,N)ma[c[i]]+=s[i]; vepll S; vel C; vel SSS; for(auto it=ma.begin();it!=ma.end();it++){ S.push_back({it->fi,it->se}); SSS.push_back(it->se); C.push_back(it->fi); } vel SS; rep(i,0,S.size())SS.push_back(S[i].fi*S[i].se); rep(i,1,SS.size())SS[i]+=SS[i-1]; rep(i,1,SSS.size())SSS[i]+=SSS[i-1]; ll ans=0; rep(i,0,N){ ll cnt=min(B,s[i]); ll sum=min(B,s[i]); ll ok=0; ll ng=S.size(); while(ng-ok>1){ ll mid=(ok+ng)/2; ll id=lower_bound(S.begin(),S.end(),(pll){c[i],ma[c[i]]})-S.begin(); if(sum+SS[mid]-(i<=mid)*c[i]*s[i]<=B)ok=mid; else ng=mid; } cnt+=SSS[ok]-(i<=ok)*s[i]; sum+=SS[ok]-(i<=ok)*s[i]*c[i]; if(ng>_; else _=1; rep(__,0,_){ _solve(); } }