#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 100010
#define ls(x) tr[x].l
#define rs(x) tr[x].r
#define fa(x) tr[x].fa
using namespace std;
struct node
{
int l,r,fa,size,v;
};
node tr[N];
int n,m,tot,root,delta,sum;
void PushUp(int x)
{
tr[x].size=tr[ls(x)].size+tr[rs(x)].size+1;
}
void zig(int x)
{
int y=fa(x);
int z=fa(y);
if(y==ls(z))ls(z)=x;
else rs(z)=x;
fa(x)=z,ls(y)=rs(x),fa(y)=x,fa(rs(x))=y,rs(x)=y;
PushUp(y),PushUp(x);
if(y==root)root=x;
}
void zag(int x)
{
int y=fa(x);
int z=fa(y);
if(y==ls(z))ls(z)=x;
else rs(z)=x;
fa(x)=z,rs(y)=ls(x),fa(y)=x,fa(ls(x))=y,ls(x)=y;
PushUp(y),PushUp(x);
if(y==root)root=x;
}
void Splay(int x,int d)
{
while(fa(x)!=d)
{
if(ls(fa(x))==x)zig(x);
else zag(x);
}
}
void insert(int x)
{
if(!root)
{
root=++tot;
tr[tot].v=x,tr[tot].size=1;
return ;
}
int p=root,z;
while(p)
{
z=p;
tr[p].size++;
if(x<tr[p].v)p=ls(p);
else p=rs(p);
}
if(x<tr[z].v)ls(z)=++tot;
else rs(z)=++tot;
tr[tot].v=x,tr[tot].size=1,fa(tot)=z;
Splay(tot,0);
}
int del(int &x,int f)
{
if(!x)return 0;
int k;
if(tr[x].v+delta<m)
{
k=del(rs(x),x)+tr[ls(x)].size+1;
tr[rs(x)].size=tr[x].size-k;
x=rs(x),fa(x)=f;
}else
{
k=del(ls(x),x);
tr[x].size-=k;
}
return k;
}
int query(int x,int k)
{
if(k<=tr[rs(x)].size)return query(rs(x),k);
if(k==tr[rs(x)].size+1)return tr[x].v;
return query(ls(x),k-tr[rs(x)].size-1);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
char s[10];
int x;
scanf("%s%d",s,&x);
if(s[0]==‘I‘&&x>=m)insert(x-delta);
else if(s[0]==‘A‘)delta+=x;
else if(s[0]==‘S‘)delta-=x,sum+=del(root,0);
else if(s[0]==‘F‘&&x>tr[root].size)puts("-1");
else if(s[0]==‘F‘)printf("%d\n",query(root,x)+delta);
}
cout<<sum<<endl;
return 0;
}