2 8
2 15 400
1 13 100
3 26
3 27
3 28
3 29
3 30
3 31
3 32
3 33
 3 8
2 15 400
1 1 200
1 13 100
3 26
3 27
3 28
3 29
3 30
3 31
3 32
3 33

400
400
500
500
800
800
800
800
 600
600
600
700
800
1000
1000
1000

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
typedef long long LL;
const LL INFLL=0X3F3F3F3F3F3F3F3FLL;
const int N=200005;
int n,Q,_w[N],_v[N],id[N],_id[N];
LL _a[N],sw0[N*4][31],sv0[N*4][31],sw1[N*4][31],sv1[N*4][31];
void bud(int k1,int k2,int k3,int k4,int k5){
	if(k2>k5||k3<k4)return;
	if(k2==k3){
		rep(k,1,30){
			if(_w[id[k2]]<(1<<k)){
				sw0[k1][k]=_a[id[k2]]*_w[id[k2]];sv0[k1][k]=_a[id[k2]]*_v[id[k2]];
			}
			sw1[k1][k]=sv1[k1][k]=INFLL;
			if(_w[id[k2]]>=(1<<(k-1))&&_w[id[k2]]<(1<<k)&&_a[id[k2]]){
				sw1[k1][k]=_w[id[k2]];sv1[k1][k]=_v[id[k2]];
			}
		}
		return;
	}
	int mid=(k2+k3)>>1;
	bud(k1*2,k2,mid,k4,k5),bud(k1*2+1,mid+1,k3,k4,k5);
	rep(k,1,30){
		sw0[k1][k]=sw0[k1*2][k]+sw0[k1*2+1][k];
		sv0[k1][k]=sv0[k1*2][k]+sv0[k1*2+1][k];
		if(sw1[k1*2][k]<sw0[k1*2][k-1]+sw1[k1*2+1][k]){
			sw1[k1][k]=sw1[k1*2][k];
			sv1[k1][k]=sv1[k1*2][k];
		}else{
			sw1[k1][k]=sw0[k1*2][k-1]+sw1[k1*2+1][k];
			sv1[k1][k]=sv0[k1*2][k-1]+sv1[k1*2+1][k];
		}
	}
}
void add(int x,int y){_a[x]+=y;bud(1,1,n,_id[x],_id[x]);}LL rem,vv; int _k;
void clip(){while(_k>0&&(1<<(_k-1))>rem)--_k;}
void qry(int k1,int k2,int k3){if(k2==k3){LL tt=min(_a[id[k2]],rem/_w[id[k2]]);rem-=tt*_w[id[k2]];vv+=tt*_v[id[k2]];return;}int mid=(k2+k3)>>1;clip();
	if(sw0[k1][_k]<=rem){rem-=sw0[k1][_k];vv+=sv0[k1][_k];return;}if(sw1[k1][_k]>rem&&sw0[k1][_k-1]<=rem){rem-=sw0[k1][_k-1];vv+=sv0[k1][_k-1];return;}
	qry(k1*2,k2,mid);clip();qry(k1*2+1,mid+1,k3);}
void sol(LL x){_k=30,rem=x,vv=0;clip();qry(1,1,n);printf("%lld\n",vv);}
int main(){
#ifdef xay5421
	freopen("a.in","r",stdin);
#endif
	scanf("%d%d",&n,&Q);rep(i,1,n){scanf("%lld%d%d",&_a[i],&_w[i],&_v[i]);id[i]=i;}sort(id+1,id+1+n,[&](int x,int y){return _v[x]^_v[y]?_v[x]>_v[y]:_w[x]<_w[y];});
	rep(i,1,n)_id[id[i]]=i;bud(1,1,n,1,n);while(Q--){int t;scanf("%d",&t);
		if(t==1){int x,y;scanf("%d%d",&x,&y);add(y,x);}else if(t==2){int x,y;scanf("%d%d",&x,&y);add(y,-x);}else{LL x;scanf("%lld",&x);sol(x);}}return 0;}