#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1,inf=INT_MAX;
struct zz{
int s[2],v,p,size,cnt;
void init(int _v,int _p){
v=_v,p=_p;
size=cnt=1;
}
}tr[N];
int n,m,root,idx,dt,ans;
void push_up(int x){
tr[x].size=tr[tr[x].s[0]].size+tr[tr[x].s[1]].size+tr[x].cnt;
}
void rotate(int x){
int y=tr[x].p,z=tr[y].p;
bool k=tr[y].s[1]==x;
tr[z].s[tr[z].s[1]==y]=x,tr[x].p=z;
tr[y].s[k]=tr[x].s[k^1],tr[tr[x].s[k^1]].p=y;
tr[x].s[k^1]=y,tr[y].p=x;
push_up(y),push_up(x);
}
void splay(int x,int k){
while(tr[x].p!=k){
int y=tr[x].p,z=tr[y].p;
if(z!=k){
if((tr[y].s[1]==x)^(tr[z].s[1]==y)) rotate(x);
else rotate(y);
}
rotate(x);
}
if(!k) root=x;
}
void insert(int x){
int u=root,p=0;
while(u&&x!=tr[u].v) p=u,u=tr[u].s[x>tr[u].v];
if(!u){
u=++idx;
if(p) tr[p].s[x>tr[p].v]=u;
tr[u].init(x,p);
}
else tr[u].cnt++;
splay(u,0);
}
int kth(int k){
int u=root;
if(k>tr[u].size-1) return -1;
while(1){
if(k<=tr[tr[u].s[0]].size) u=tr[u].s[0];
else if(k>tr[tr[u].s[0]].size+tr[u].cnt) k-=tr[tr[u].s[0]].size+tr[u].cnt,u=tr[u].s[1];
else return tr[u].v;
}
}
void find(int x){
int u=root;
if(!u) return;
while(tr[u].s[x>tr[u].v]&&x!=tr[u].v){
u=tr[u].s[x>tr[u].v];
}
splay(u,0);
}
int get_nxt(int x,bool f){
find(x);
int u=root;
if((tr[u].v>x&&f)||(tr[u].v<x&&!f)) return u;
u=tr[u].s[f];
while(tr[u].s[!f]){
u=tr[u].s[!f];
}
return u;
}
void del(int x){
int l=get_nxt(x,0),r=get_nxt(x,1);
splay(l,0),splay(r,l);
if(tr[tr[r].s[0]].cnt>1){
tr[tr[r].s[0]].cnt--;
splay(tr[r].s[0],0);
}
else tr[r].s[0]=0;
}
int main(){
cin>>n>>m;
insert(inf),insert(-inf);
for(int i=1;i<=n;i++){
char opt;
int c;
cin>>opt>>c;
if(opt=='I'){
if(c>=m){
insert(c);
}
}
if(opt=='A') dt+=c;
if(opt=='S'){
dt-=c;
if(dt<0){
insert(m-dt);
find(-inf);
int l=root;
find(m-dt);
int r=root;
splay(l,0),splay(r,l);
ans+=tr[tr[r].s[0]].size;
tr[r].s[0]=0;
del(m-dt);
}
}
if(opt=='F'){
cout<<kth(c+1)+dt<<endl;
}
}
cout<<ans;
return 0;
}