#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max(x,y) (x>y?x:y)
typedef struct _machine{
int t;
int v;
int w;
struct _machine *next;
}Machine;
void add(Machine **machine,int t,int v,int w,int p){
int i;
Machine *last=*machine,*new_machine=(Machine *)malloc(sizeof(Machine));
new_machine->t=t,new_machine->v=v,new_machine->w=w;
for(i=0;i<p-1;i++)
last = last->next;
if(!p){
new_machine->next=last;
*machine=new_machine;
}
else{
new_machine->next=last->next;
last->next=new_machine;
}
}
void del(Machine **machine,int p){
int i;
Machine *last=NULL,*target=*machine;
for(i=0;i<p;i++){
last=target;
target=target->next;
}
if(!p)
*machine=(*machine)->next;
else
last->next=last->next->next;
free(target);
}
void change(Machine *machine,int t,int v,int w,int p){
int i;
for(i=0;i<p;i++)
machine=machine->next;
machine->t=t,machine->v=v,machine->w=w;
}
void show_machine(Machine *machine){
int i;
for(i=1;machine!=NULL;i++){
printf("%d:t=%d v=%d w=%d\n",i,machine->t,machine->v,machine->w);
machine=machine->next;
}
}
int calculate(Machine *machine,int x,int y){
int i,dp[y+1];
memset(dp,0,sizeof(dp));
while(machine!=NULL){
if(machine->t)
for(i=machine->v;i<=y;i++)
dp[i]=max(dp[i],dp[i-machine->v]+machine->w);
else
for(i=y;i>=machine->v;i--)
dp[i]=max(dp[i],dp[i-machine->v]+machine->w);
machine=machine->next;
}
return dp[y]+x;
}
int main(void){
int q,v,last=0,p=0;
int opt,ti,vi,wi,xi,yi;
Machine *machines=NULL;
scanf("%d%d",&q,&v);
while(q--){
scanf("%d%d%d%d%d%d",&opt,&ti,&vi,&wi,&xi,&yi);
opt^=last,ti^=last,vi^=last,wi^=last,xi^=last,yi^=last;
switch(opt){
case 1:p++;break;
case 2:p--;break;
case 3:
add(&machines,ti,vi,wi,p);
break;
case 4:
del(&machines,p);
break;
case 5:
change(machines,ti,vi,wi,p);
break;
}
last=calculate(machines,xi,yi);
printf("%d\n",last);
}
return 0;
}