#include<bits/stdc++.h>
#define int long long
#define ls root<<1
#define rs root<<1|1
#define as (start+end)>>1
const int N=800005;
using namespace std;
inline int read(){
int t=1,x=0;
char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') t=-1;
for(;isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
return t*x;
}
int c,q,n;
int tr[N<<2];
int sum[N<<2];
int tim,flag;
void pushup(int root){
tr[root]=max(tr[ls],tr[rs]);
}
void updata(int root,int start,int end,int loc,int val){
if(start==end){
tr[root]=val;
return ;
}
int mid=as;
if(loc<=mid) updata(ls,start,mid,loc,val);
else updata(rs,mid+1,end,loc,val);
pushup(root);
}
int qurey(int root,int start,int end,int l,int r){
if(start>=l && end<=r) return tr[root];
int mid=as;
int res=0;
if(mid>=l) res=max(res,qurey(ls,start,mid,l,r));
if(mid<r) res=max(res,qurey(rs,mid+1,end,l,r));
return res;
}
signed main(){
cin>>c>>q;
flag=1;
while(q--){
int num=read();
if(num==1){
int x=read();
n++;
sum[n]=sum[n-1]+x;
updata(1,1,n,n,x);
}
else if(num==2){
int x=read();
tim+=x;
while(sum[flag]<=tim) flag++;
}
else if(num==3){
int x=read();
int qwq=lower_bound(sum+1,sum+n+1,tim+x)-sum;//二分
x+=tim;
cout<<x-sum[qwq-1]<<endl;
}
else{
cout<<qurey(1,1,n,flag,n)<<endl;
}
}
return 0;
}
真的尽力了