#include<bits/stdc++.h>
using namespace std;
struct fhq{
int val,key,siz,ch[2];
}t[840010];
int rt,tot,cnt;
int n,minn,add;
void maintain(int x){t[x].siz=t[t[x].ch[0]].siz+t[t[x].ch[1]].siz+1;}
int create(int x)
{
int u=++tot;
t[u].siz=1;t[u].ch[0]=t[u].ch[1]=0;
t[u].val=x;
t[u].key=rand()*rand()%2147483647;
return u;
}
void split(int now,int key,int &x,int &y)
{
if(now==0)
{
x=y=0;return ;
}
if(t[now].val<=key)
{
x=now;split(t[now].ch[1],key,t[x].ch[1],y);
}
else
{
y=now;split(t[now].ch[0],key,x,t[y].ch[0]);
}
maintain(now);
}
int merge(int x,int y)
{
if(x==0||y==0)
{
return x+y;
}
if(t[x].key>t[y].key)
{
t[x].ch[1]=merge(t[x].ch[1],y);
maintain(x);
return x;
}
else
{
t[y].ch[0]=merge(x,t[y].ch[0]);
maintain(y);
return y;
}
}
int kth(int k)
{
int u=rt;
while(1)
{
if(t[t[u].ch[0]].siz>=k)
{
u=t[u].ch[0];
}
else if(t[t[u].ch[0]].siz+1<k)
{
k-=(t[t[u].ch[0]].siz+1);
u=t[u].ch[1];
}
else
{
return t[u].val;
}
}
}
void del(int k)
{
int x,y;
split(rt,k-1,x,y);
rt=y;maintain(rt);
cnt+=t[x].siz;
}
void insert(int k)
{
int x,y;
split(rt,k-1,x,y);
rt=merge(merge(x,create(k)),y);
}
signed main(){
srand(time(0));
cin>>n>>minn;
for(int i=1;i<=n;i++)
{
char op;int k;
cin>>op>>k;
if(op=='I')
{
if(k>=minn) insert(k-add);
}
if(op=='A')
{
add+=k;
}
if(op=='S')
{
add-=k;del(minn-add);
}
if(op=='F')
{
if(t[rt].siz<k) cout<<-1<<endl;
else cout<<kth(t[rt].siz-k+1)+add<<endl;
}
}
cout<<cnt<<endl;
return 0;
}