HELP !
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline bool id(const char ch) {
return ch>='0'&&ch<='9';
}
inline int read(void) {
int s=0,f=0;
char ch=getchar();
while(!id(ch)) f=(ch=='-'),ch=getchar();
while(id(ch)) s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
return f?-s:s;
}
const int MAXN=120000+10,MAXK=120000+10,MAXW=120000+10;
int n,K,q,idx,TME,dp[MAXN],v[MAXK],w[MAXK],frm[MAXK],to[MAXK],ans[MAXN],p[MAXN];
vector<pair<int,int> >node[MAXK];
void update(const int k,const int l,const int r,const int x,const int y,const int v,const int w) {
if(x>y) return;
if(x<=l&&r<=y) {
node[k].push_back(make_pair(v,w));
return;
}
int mid=l+r>>1;
if(x<=mid) update(k<<1,l,mid,x,y,v,w);
if(y>mid) update(k<<1|1,mid+1,r,x,y,v,w);
return;
}
void solve(const int k,const int l,const int r) {
int TMEp[MAXW]={0};
for(int i=0;i<node[k].size();i++) {
int v=node[k][i].first,w=node[k][i].second;
for(int j=K;j>=w;j--) dp[j]=max(dp[j],dp[j-w]+v);
}
if(l==r) {
// printf("?%d\n",l);
// for(int i=1;i<=K;i++) printf("%d ",dp[i]);
// printf("\n");
for(int i=1;i<=K;i++) ans[l]+=dp[i]*p[i-1],ans[l]%=(1000000000+7);
return;
}
int mid=l+r>>1;
memcpy(TMEp,dp,sizeof(TMEp));
solve(k<<1,l,mid);
memcpy(dp,TMEp,sizeof(TMEp));
solve(k<<1|1,mid+1,r);
return;
}
signed main() {
n=read(),K=read(),TME=1;
p[0]=1;
for(int i=1;i<=K;i++) p[i]=p[i-1]*(10000000+19)%(1000000000+7);
for(int i=1;i<=n;i++) v[++idx]=read(),w[idx]=read(),frm[idx]=1;
q=read();
for(int i=2,op,x;i<=q+1;i++) {
op=read();
if(op==1) v[++idx]=read(),w[idx]=read(),frm[idx]=TME;
if(op==2) x=read(),to[x]=TME;
if(op==3) TME++;
}
for(int i=1;i<=idx;i++) if(to[i]==0) to[i]=TME;
for(int i=1;i<=idx;i++) update(1,1,TME,frm[i]+1,to[i],v[i],w[i]);
solve(1,1,TME);
for(int i=2;i<=TME;i++) printf("%lld\n",ans[i]);
return 0;
}