rt
#include<bits/stdc++.h>
#define int long long
#define x first
#define y second
#define il inline
#define debug() puts("-----")
using namespace std;
typedef pair<int,int> pii;
il int read(){
int x=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*f;
}
const int N=1e6+10;
int rt;
struct Node{
int key;
int ls,rs;
int val,siz;
}tr[N]; int idx=0;
il void pushup(int u){
tr[u].siz=tr[tr[u].ls].siz+tr[tr[u].rs].siz+1;
}
il int build(int val){
tr[++idx]={rand(),0,0,val,1};
return idx;
}
il void split_val(int u,int val,int &x,int &y){
if(!u){ x=0,y=0; return ; }
if(tr[u].val<=val) x=u,split_val(tr[u].rs,val,tr[u].rs,y);
else y=u,split_val(tr[u].ls,val,x,tr[u].ls); pushup(u);
}
il void split_siz(int u,int siz,int &x,int &y){
if(!u){ x=0,y=0; return ; }
if(tr[tr[u].ls].siz+1<=siz) x=u,split_siz(tr[u].rs,siz-tr[tr[u].ls].siz-1,tr[u].rs,y);
else y=u,split_siz(tr[u].ls,siz,x,tr[u].ls); pushup(u);
}
il int merge(int x,int y){
if(!x||!y) return x|y;
if(tr[x].key<tr[y].key){
tr[x].rs=merge(tr[x].rs,y);
pushup(x); return x;
} tr[y].ls=merge(x,tr[y].ls);
pushup(y); return y;
}
int cnt=0;
il int rnk(int x){
int t1,t2,t3;
split_siz(rt,x,t1,t2); split_siz(t1,x-1,t1,t3);
int res=tr[t3].val; rt=merge(merge(t1,t3),t2);
return res;
}
il void add(int x){
int t1,t2;
split_val(rt,x,t1,t2);
rt=merge(merge(t1,build(x)),t2);
}
il void del(int x){
int t1,t2,t3;
split_val(rt,x,t1,t2); split_val(t1,x-1,t1,t3);
t3=merge(tr[t3].ls,tr[t3].rs); rt=merge(merge(t1,t3),t2);
}
signed main(){
int ans=0;
int n=read(),Min=read();
while(n--){
char op; int x;
cin>>op; x=read();
if(op=='I'){
if(x<Min) continue;
add(x),cnt++;
} else if(op=='A'){
vector<int> vec;
for(int i=1;i<=cnt;i++){
int val=rnk(i);
vec.push_back(val);
} for(auto u:vec) del(u),add(u+x);
} else if(op=='S'){
int num=0;
vector<int> vec;
for(int i=1;i<=cnt;i++){
int val=rnk(i);
vec.push_back(val);
} for(auto u:vec){
del(u);
if(u-x<Min) num++;
else add(u-x);
} cnt-=num,ans+=num;
} else{
if(x>cnt) puts("-1");
else printf("%lld\n",rnk(cnt-x+1));
}
} printf("%lld\n",ans);
return 0;
}