#include<bits/stdc++.h>
using namespace std;
const int M=62,N=1e5+7;
long long A,B,C,D,mx[M][N<<2],mn[M][N<<2],f1[M][N<<2],f2[M][N<<2];
int n,q,k,P,Q,L,G[N<<1],w[N<<1],s[N<<1],t[N<<1],pos[N<<1]; long long a[N<<1],f[N],g[N]; pair<long long,int>F[N];
struct node{
	int l,r; long long t;
}e;
vector<node>v[N<<1];
inline bool cmp(int a,int b){
	if(s[a]==s[b]) return w[a]>w[b]; return s[a]<s[b];
}
inline int logc(long long u){
	int p=0; while(u>0) u=u>>1,p++; return p;
}
inline void build(int l,int r,int t){
	mx[P][t]=mn[P][t]=-1; if(l==r) return;
	int d=(l+r)>>1; build(l,d,t<<1),build(d+1,r,t<<1|1); return;
}
inline void pushdown(int t){
	if(!f1[P][t]&&!f2[P][t]) return;
	if(mx[P][t<<1]!=-1){
		mx[P][t<<1]-=f1[P][t];
		mn[P][t<<1]-=f1[P][t];
		f1[P][t<<1]+=f1[P][t];
		f2[P][t<<1]+=f2[P][t];
	}
	if(mx[P][t<<1|1]!=-1){
		mx[P][t<<1|1]-=f1[P][t];
		mn[P][t<<1|1]-=f1[P][t];
		f1[P][t<<1|1]+=f1[P][t];
		f2[P][t<<1|1]+=f2[P][t];
	}
	f1[P][t]=0,f2[P][t]=0;
}
inline void add(int l,int r,int t){
	if(l==r){
		mx[P][t]=mn[P][t]=f[Q]; return;
	}
	pushdown(t);
	int d=(l+r)>>1;
	if(Q<=d) add(l,d,t<<1);
	else add(d+1,r,t<<1|1);
	if(mn[P][t<<1]==-1) mn[P][t]=mn[P][t<<1|1],mx[P][t]=mx[P][t<<1|1];
	else if(mn[P][t<<1|1]==-1) mn[P][t]=mn[P][t<<1],mx[P][t]=mx[P][t<<1];
	else mx[P][t]=max(mx[P][t<<1],mx[P][t<<1|1]),mn[P][t]=min(mn[P][t<<1],mn[P][t<<1|1]);
}
inline void upd(int l,int r,int t){
	if(l==r){
		if(mx[P][t]==-1) return;
		if(mx[P][t]<(1ll<<(P-1))){
			Q=l,g[Q]+=f2[P][t],L++,F[L]=make_pair(mx[P][t],l),mx[P][t]=-1,mn[P][t]=-1;
		}
		return;
	}
	pushdown(t);
	int d=(l+r)>>1;
	if(mn[P][t]>=(1ll<<(P-1))||mx[P][t]==-1) return;
	upd(l,d,t<<1),upd(d+1,r,t<<1|1);
	if(mn[P][t<<1]==-1) mn[P][t]=mn[P][t<<1|1],mx[P][t]=mx[P][t<<1|1];
	else if(mn[P][t<<1|1]==-1) mn[P][t]=mn[P][t<<1],mx[P][t]=mx[P][t<<1];
	else mx[P][t]=max(mx[P][t<<1],mx[P][t<<1|1]),mn[P][t]=min(mn[P][t<<1],mn[P][t<<1|1]);
}
inline void dfs(int l,int r,int t,int ql,int qr){
	if(l==r){
		if(mx[P][t]==-1) return;
		if(mx[P][t]>=B) mx[P][t]-=B,mn[P][t]-=B,f2[P][t]+=D;
		else f2[P][t]+=(mx[P][t]/A)*C,mx[P][t]%=A,mn[P][t]%=A;
		if(mx[P][t]<(1ll<<(P-1))){
			Q=l,g[Q]+=f2[P][t],L++,F[L]=make_pair(mx[P][t],l),mx[P][t]=-1,mn[P][t]=-1;
		}
		return;
	}
	if(l==ql&&r==qr){
		if(mn[P][t]>=B){
			f1[P][t]+=B,f2[P][t]+=D,pushdown(t);
//			if(P==13) cout<<f2[P][t<<1]<<"www"<<endl;
			if(mn[P][t]<(1ll<<(P-1))) upd(l,r,t);
		}
		else if(mx[P][t]<A) pushdown(t);
		else{
			pushdown(t); int d=(l+r)>>1;
			dfs(l,d,t<<1,l,d),dfs(d+1,r,t<<1|1,d+1,r);
		}
		if(mn[P][t<<1]==-1) mn[P][t]=mn[P][t<<1|1],mx[P][t]=mx[P][t<<1|1];
		else if(mn[P][t<<1|1]==-1) mn[P][t]=mn[P][t<<1],mx[P][t]=mx[P][t<<1];
		else mx[P][t]=max(mx[P][t<<1],mx[P][t<<1|1]),mn[P][t]=min(mn[P][t<<1],mn[P][t<<1|1]);
		return;
	}
	int d=(l+r)>>1; pushdown(t);
	if(ql<=d) dfs(l,d,t<<1,ql,min(d,qr));
	if(d+1<=qr) dfs(d+1,r,t<<1|1,max(d+1,ql),qr);
	if(mn[P][t<<1]==-1) mn[P][t]=mn[P][t<<1|1],mx[P][t]=mx[P][t<<1|1];
	else if(mn[P][t<<1|1]==-1) mn[P][t]=mn[P][t<<1],mx[P][t]=mx[P][t<<1];
	else mx[P][t]=max(mx[P][t<<1],mx[P][t<<1|1]),mn[P][t]=min(mn[P][t<<1],mn[P][t<<1|1]);
}
inline void dfs2(int l,int r,int t){
	if(mx[P][t]==-1) return;
	if(l==r){
		g[l]+=f2[P][t]; return;
	}
	int d=(l+r)>>1;
	f2[P][t<<1]+=f2[P][t],f2[P][t<<1|1]+=f2[P][t];
	dfs2(l,d,t<<1),dfs2(d+1,r,t<<1|1);
}
int main(){
	cin>>n>>q; int op,c,d;
	for(int i=1;i<=n;i++) scanf("%lld%d%d",&a[i],&w[i],&s[i]),t[i]=1,G[i]=i;
	sort(G+1,G+n+1,cmp);
	for(int i=1;i<=q;i++){
		scanf("%d",&op);
		if(op==1){
			scanf("%d%d",&c,&d);
			e.l=t[d],e.r=k,e.t=a[d]; v[d].push_back(e),t[d]=k+1,a[d]+=c;
		}
		if(op==2){
			scanf("%d%d",&c,&d);
			e.l=t[d],e.r=k,e.t=a[d]; v[d].push_back(e),t[d]=k+1,a[d]-=c;
		}
		if(op==3){
			k++,scanf("%lld",&f[k]);
		}
	}
	if(k==0) return 0;
	for(d=1;d<=n;d++) e.l=t[d],e.r=k,e.t=a[d],v[d].push_back(e);
	for(int i=0;i<=60;i++) P=i,build(1,k,1);
	for(int i=1;i<=k;i++) P=logc(f[i]),Q=i,add(1,k,1);
	for(int x=n;x>=1;x--){
		L=0; int i=G[x];
		for(int j=0;j<v[i].size();j++){
			if(v[i][j].t==0||v[i][j].l>v[i][j].r) continue;
			A=w[i],B=w[i]*v[i][j].t,C=s[i],D=s[i]*v[i][j].t;
			for(int w=0;w<=60;w++){
				P=w; if(mx[P][1]<A) continue; dfs(1,k,1,v[i][j].l,v[i][j].r);
			}
		}
//		cerr<<L<<","<<F[1].second<<","<<F[2].second<<endl;
//		cout<<A<<","<<B<<","<<C<<","<<D<<":"<<endl; 
		for(int j=1;j<=L;j++){
			f[F[j].second]=F[j].first,Q=F[j].second,P=logc(f[F[j].second]),add(1,k,1);
//			cout<<F[j].second<<"sdassa"<<g[2]<<endl;
		}
//		cout<<logc(4096)-1<<"www"<<endl;
//		cout<<mx[11][1]<<","<<mn[11][1]<<"www"<<","<<f2[11][1]<<endl;
	}
	for(int j=0;j<=60;j++) P=j,dfs2(1,k,1);
	for(int i=1;i<=k;i++) printf("%lld\n",g[i]);
}
//4 5
//1 44 12
//3 4 16
//4 26 50
//1 50 32
//3 1349
//3 2157
//3 141
//3 3764
//3 4525


