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<stdio.h>
#include<algorithm>
#define inf 1000000000000000001
using namespace std;
const int maxn=200005,maxk=19,maxt=maxn<<2;
int n,m,omega;
int pos[maxn],id[maxn],w[maxn],v[maxn],lc[maxt],rc[maxt];
long long c;
long long a[maxn],lightv[maxt][maxk],extra[maxt][maxk],lightw[maxt][maxk];
inline int cmp(int x,int y){
	return v[x]>v[y]||(v[x]==v[y]&&w[x]<w[y]);
}
inline void getval(int now,int p){
	for(int i=1;i<=18;i++){
		lightv[now][i]=lightw[now][i]=0,extra[now][i]=inf;
		if(w[p]<(1<<(i-1)))
			lightv[now][i]=a[p]*v[p],lightw[now][i]=a[p]*w[p];
		else if(w[p]<(1<<i)&&a[p]>0)
			extra[now][i]=w[p];
	}
}
inline void pushup(int now){
	for(int i=1;i<=18;i++){
		lightv[now][i]=lightv[lc[now]][i]+lightv[rc[now]][i];
		lightw[now][i]=lightw[lc[now]][i]+lightw[rc[now]][i];
		extra[now][i]=min(extra[lc[now]][i],lightw[lc[now]][i]+extra[rc[now]][i]);
	}
}
void build(int l,int r,int now){
	if(l==r){
		getval(now,id[l]);
		return ;
	}
	int mid=(l+r)>>1;
	lc[now]=now<<1,rc[now]=now<<1|1;
	build(l,mid,lc[now]),build(mid+1,r,rc[now]);
	pushup(now);
}
void update(int l,int r,int now,int pos){
	if(l==r){
		getval(now,id[l]);
		return ;
	}
	int mid=(l+r)>>1;
	if(pos<=mid)
		update(l,mid,lc[now],pos);
	else update(mid+1,r,rc[now],pos);
	pushup(now);
}
void calc(){
	while(omega>1&&(1<<((omega-1)-1))>c)
		omega--;
}
long long query(int l,int r,int now){
	if(l==r){
		long long num=min(a[id[l]],c/w[id[l]]);
		c-=num*w[id[l]],calc();
		return num*v[id[l]];
	}
	if(lightw[now][omega]<=c){
		long long res=lightv[now][omega];
		c-=lightw[now][omega],calc();
		return res;
	}
	if(lightw[now][omega-1]<=c&&c<extra[now][omega-1]){
		long long res=lightv[now][omega-1];
		c-=lightw[now][omega-1],calc();
		return res;
	}
	int mid=(l+r)>>1;
	return query(l,mid,lc[now])+query(mid+1,r,rc[now]);
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%lld%d%d",&a[i],&w[i],&v[i]),id[i]=i;
	sort(id+1,id+1+n,cmp);
	for(int i=1;i<=n;i++)
		pos[id[i]]=i;
	build(1,n,1);
	for(int i=1;i<=m;i++){
		int t,k,d;
		scanf("%d",&t);
		if(t==1||t==2){
			scanf("%d%d",&k,&d);
			a[d]+=(t==1? k:-k),update(1,n,1,pos[d]);
		}
		if(t==3){
			scanf("%lld",&c),omega=18,calc();
			printf("%lld\n",query(1,n,1));
		}
	}
	return 0;
}