#include<stdio.h>
#include<algorithm>
typedef long long ll;
ll map[300010],move[300010],k[300010];
char c[300010];
struct tree {
int l,r,sum;
} tr[1200010];
int Find(ll x,int r) {
int l=1,ans=0;
while(l<=r) {
int mid=(l+r)/2;
if(map[mid]==x)
return mid;
if(map[mid]<x) {
l=mid+1;
ans=mid;
} else
r=mid-1;
}
return ans;
}
void build(int i,int l,int r) {
tr[i].l=l;
tr[i].r=r;
if(l==r)
return;
int mid=(l+r)/2;
build(i*2,l,mid);
build(i*2+1,mid+1,r);
}
void push_up(int i) {
tr[i].sum=tr[i*2].sum+tr[i*2+1].sum;
}
void add(int i,int x) {
if(tr[i].r<x||tr[i].l>x) return ;
if(x<=tr[i].l&&tr[i].r<=x) {
tr[i].sum++;
return ;
}
add(i*2,x);
add(i*2+1,x);
push_up(i);
}
void dele(int i,int r) {
if(tr[i].l>r)
return ;
if(tr[i].l==tr[i].r) {
tr[i].sum=0;
return ;
}
dele(i*2,r);
dele(i*2+1,r);
push_up(i);
}
int find(int i,int k) {
if(tr[i].l==tr[i].r)
return tr[i].l;
if(tr[i*2].sum>=k)
return find(i*2,k);
return find(i*2+1,k-tr[i*2].sum);
}
int main() {
int n,sum=0,minn,tot=0;
scanf("%d%d",&n,&minn);
for(int i=1; i<=n; i++) {
c[i]=getchar();
while(!(c[i]>='A'&&c[i]<='Z'))
c[i]=getchar();
scanf("%lld",&k[i]);
move[i]=move[i-1];
switch(c[i]) {
case 'I':
map[++sum]=k[i]-move[i];
tot++;
break;
case 'A':
move[i]=move[i]+k[i];
break;
case 'S':
move[i]=move[i]-k[i];
}
}
std::sort(map+1,map+1+sum);
std::unique(map+1,map+1+sum);
for(int i=sum;i>=1;i--)
if(map[i]==map[i-1])
sum--;
else
break;
build(1,1,sum);
for(int i=1; i<=n; i++) {
switch(c[i]) {
case 'I':
if(k[i]>=minn) {
int num=Find(k[i]-move[i],sum);
add(1,num);
}
break;
case 'S':
if(minn-move[i]>map[1]) {
int x=Find(minn-move[i],sum);
while(map[x]>=minn-move[i])
x--;
dele(1,x);
}
break;
case 'F':
if(k[i]>tr[1].sum) {
printf("-1\n");
break;
}
int u = find(1,tr[1].sum-k[i]+1);
printf("%lld\n",map[u]+move[i]);
}
}
printf("%d",tot-tr[1].sum);
return 0;
}