RT
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
#define mp(x, y) make_pair(x, y)
#define pqg priority_queue<int, vector<int>, greater<int>>
#define pql priority_queue<int, vector<int>, less<int>>
#define ls(x) tree[x].lson
#define rs(x) tree[x].rson
#define scnaf scanf
#define int long long
const int MAX = 2e5 + 5;
const int INF = 0x7fffffff;
const int mod = 998244353;
mt19937 rnd(233);
int siz, rt, x, y, z, n, s, m, minn, sum, ans;
char op;
struct Day_Tao
{
int lson, rson;
int val, key, sz;
} tree[MAX];
inline void push_up(int root)
{
tree[root].sz = tree[ls(root)].sz + tree[rs(root)].sz + 1;
}
inline void split(int root, int val, int &x, int &y)
{
if (!root)
{
x = y = 0;
return;
}
if (tree[root].val <= val)
x = root, split(rs(root), val, rs(root), y);
else
y = root, split(ls(root), val, x, ls(root));
push_up(root);
}
inline int merge(int x, int y)
{
if (x == 0 || y == 0)
return x + y;
if (tree[x].key < tree[y].key)
{
rs(x) = merge(rs(x), y), push_up(x);
return x;
}
else
{
ls(y) = merge(x, ls(y)), push_up(y);
return y;
}
}
inline int add(int val)
{
tree[++siz].val = val;
tree[siz].key = rnd();
tree[siz].sz = 1;
return siz;
}
inline void insert(int val)
{
split(rt, val, x, y);
rt = merge(merge(x, add(val)), y);
}
inline void del(int val)
{
split(rt, val, x, y), split(x, val - 1, x, z);
rt = merge(merge(x, merge(ls(z), rs(z))), y);
}
inline int find_by_order(int rk)
{
int root = rt;
while (root)
{
if (tree[ls(root)].sz + 1 == rk)
break;
else if (tree[ls(root)].sz >= rk)
root = ls(root);
else
rk -= tree[ls(root)].sz + 1, root = rs(root);
}
return tree[root].val;
}
inline int get_pre(int val)
{
split(rt, val - 1, x, y);
int root = x, res;
while (rs(root))
root = rs(root);
res = tree[root].val,
rt = merge(x, y);
return res;
}
signed main()
{
int p = 0;
scanf("%lld%lld", &n, &minn);
while (n--)
{
cin >> op >> s;
if (op == 'I')
{
s += p;
if (s < minn)
continue;
insert(s);
sum++;
}
else if (op == 'A')
{
p -= s, minn -= s;
}
else if (op == 'S')
{
p += s, minn += s;
while (get_pre(minn))
del(get_pre(minn)), sum--, ans++;
}
else if (op == 'F')
{
if (s > sum)
puts("-1");
else
printf("%lld\n", find_by_order(sum - s + 1) - p);
}
}
printf("%lld\n", ans);
system("pause");
return 0;
}