#include #define endl '\n' #define fi first #define se second using namespace std; const int MAXN=1e6+5; struct Stick { long long h,p; int num; }; int n; long long b; Stick st[MAXN]; vector hl[MAXN]; long long s[MAXN]; priority_queue > pq; long long ptr=0; bool cmp(Stick a,Stick b) { if(a.p==b.p) return a.h>b.h; return a.p>b.p; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); freopen("sticks.in","r",stdin); freopen("sticks.out","w",stdout); cin>>n>>b; for(int i=1;i<=n;i++) cin>>st[i].h; for(int i=1;i<=n;i++) cin>>st[i].p; for(int i=1;i<=n;i++) st[i].num=i; sort(st+1,st+n+1,cmp); pq.push({b,++ptr}); for(int i=1;i<=n;i++) { if(pq.empty()) { hl[++ptr].push_back(i); pq.push({b-st[i].h, ptr}); continue; } auto cur=pq.top();//cout<up) { hl[++ptr].push_back(hl[i].back()); hl[i].pop_back(); s[i]-=curh; pq.push({b-s[i],i}); } } } cout<