using namespace std;
#include <iostream>
#include <iomanip>
#include <vector>
#include <cstdio>
#include <set>
#include <cctype>
#include <map>
#include <cmath>
#include <queue>
#include <algorithm>
#include <stack>
#include <cctype>
#include <cstring>
#include <string>
#include <tuple>
#define MAX 300010
#define PRIME 31
#define INC 100000
#define MOD 1000000007
#define PI 3.1415926535897932384
#define F first
#define S second
#define pb push_back
#define mp make_pair
typedef long long ll;
struct node{
int s, e;
int cont;
};
int t, m, least, d, lft;
node tree[5*MAX];
void build(int s, int e, int pos){
int mid = s+(e-s)/2;
tree[pos].s = s; tree[pos].e = e;
tree[pos].cont = 0;
if(s < e){
build(s, mid, 2*pos);
build(mid+1, e, 2*pos+1);
}
}
// op: {0, 1} = {reset cont in range, cont += 1}
int update(int s, int e, bool op, int pos){
int dec, mid = tree[pos].s+(tree[pos].e-tree[pos].s)/2;
if(tree[pos].s == tree[pos].e) dec = tree[pos].cont;
else if(mid >= e) dec = update(s, e, op, 2*pos);
else if(mid < s) dec = update(s, e, op, 2*pos+1);
else dec = update(s, mid, op, 2*pos)+update(mid+1, e, op, 2*pos+1);
if(op) tree[pos].cont += 1;
else tree[pos].cont -= dec;
// How many people left
return dec;
}
// Find the K-th bigger wage
int query(int num, int pos){
// Not enough workers
if(num > tree[pos].cont) return MOD*(-1);
if(tree[pos].s == tree[pos].e) return tree[pos].s;
if(tree[2*pos+1].cont < num) return query(num-tree[2*pos+1].cont, 2*pos);
return query(num, 2*pos+1);
}
int main(){
//freopen("in.txt", "r", stdin);
cin >> t;
while(t--){
cin >> m >> least;
build(0, MAX-1, 1);
d = 0; lft = 0;
char c; int k;
for(int i = 0;i < m;i++){
scanf(" %c %d", &c, &k);
if(c == 'I'){
if(k >= least) update(INC+k-d, INC+k-d, true, 1);
}
else if(c == 'A') d += k;
else if(c == 'S'){
if(!k) continue;
lft += update(INC+least-d, INC+least-d+k-1, false, 1);
d -= k;
}
else{
int temp = query(k, 1);
if(temp != MOD*(-1)) temp += d;
else temp = INC-1;
printf("%d\n", temp-INC);
};
}
printf("%d\n", lft);
}
return 0;
}
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx0dXBsZT4KCiNkZWZpbmUgTUFYIDMwMDAxMAojZGVmaW5lIFBSSU1FIDMxCiNkZWZpbmUgSU5DIDEwMDAwMAojZGVmaW5lIE1PRCAxMDAwMDAwMDA3CiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMyMzg0CiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbXAgbWFrZV9wYWlyCnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKc3RydWN0IG5vZGV7CiAgICBpbnQgcywgZTsKICAgIGludCBjb250Owp9OwoKaW50IHQsIG0sIGxlYXN0LCBkLCBsZnQ7Cm5vZGUgdHJlZVs1Kk1BWF07Cgp2b2lkIGJ1aWxkKGludCBzLCBpbnQgZSwgaW50IHBvcyl7CiAgICBpbnQgbWlkID0gcysoZS1zKS8yOwogICAgdHJlZVtwb3NdLnMgPSBzOyB0cmVlW3Bvc10uZSA9IGU7CiAgICB0cmVlW3Bvc10uY29udCA9IDA7CgogICAgaWYocyA8IGUpewogICAgICAgIGJ1aWxkKHMsIG1pZCwgMipwb3MpOwogICAgICAgIGJ1aWxkKG1pZCsxLCBlLCAyKnBvcysxKTsKICAgIH0KfQoKLy8gb3A6IHswLCAxfSA9IHtyZXNldCBjb250IGluIHJhbmdlLCBjb250ICs9IDF9CmludCB1cGRhdGUoaW50IHMsIGludCBlLCBib29sIG9wLCBpbnQgcG9zKXsKICAgIGludCBkZWMsIG1pZCA9IHRyZWVbcG9zXS5zKyh0cmVlW3Bvc10uZS10cmVlW3Bvc10ucykvMjsKCiAgICBpZih0cmVlW3Bvc10ucyA9PSB0cmVlW3Bvc10uZSkgZGVjID0gdHJlZVtwb3NdLmNvbnQ7CiAgICBlbHNlIGlmKG1pZCA+PSBlKSBkZWMgPSB1cGRhdGUocywgZSwgb3AsIDIqcG9zKTsKICAgIGVsc2UgaWYobWlkIDwgcykgZGVjID0gdXBkYXRlKHMsIGUsIG9wLCAyKnBvcysxKTsKICAgIGVsc2UgZGVjID0gdXBkYXRlKHMsIG1pZCwgb3AsIDIqcG9zKSt1cGRhdGUobWlkKzEsIGUsIG9wLCAyKnBvcysxKTsKCiAgICBpZihvcCkgdHJlZVtwb3NdLmNvbnQgKz0gMTsKICAgIGVsc2UgdHJlZVtwb3NdLmNvbnQgLT0gZGVjOwoKICAgIC8vIEhvdyBtYW55IHBlb3BsZSBsZWZ0CiAgICByZXR1cm4gZGVjOwp9CgovLyBGaW5kIHRoZSBLLXRoIGJpZ2dlciB3YWdlCmludCBxdWVyeShpbnQgbnVtLCBpbnQgcG9zKXsKCiAgICAvLyBOb3QgZW5vdWdoIHdvcmtlcnMKICAgIGlmKG51bSA+IHRyZWVbcG9zXS5jb250KSByZXR1cm4gTU9EKigtMSk7CgogICAgaWYodHJlZVtwb3NdLnMgPT0gdHJlZVtwb3NdLmUpIHJldHVybiB0cmVlW3Bvc10uczsKICAgIGlmKHRyZWVbMipwb3MrMV0uY29udCA8IG51bSkgcmV0dXJuIHF1ZXJ5KG51bS10cmVlWzIqcG9zKzFdLmNvbnQsIDIqcG9zKTsKICAgIHJldHVybiBxdWVyeShudW0sIDIqcG9zKzEpOwp9CgppbnQgbWFpbigpewogICAgLy9mcmVvcGVuKCJpbi50eHQiLCAiciIsIHN0ZGluKTsKCiAgICBjaW4gPj4gdDsKICAgIHdoaWxlKHQtLSl7CgogICAgICAgIGNpbiA+PiBtID4+IGxlYXN0OwoKICAgICAgICBidWlsZCgwLCBNQVgtMSwgMSk7CiAgICAgICAgZCA9IDA7IGxmdCA9IDA7CgogICAgICAgIGNoYXIgYzsgaW50IGs7CiAgICAgICAgZm9yKGludCBpID0gMDtpIDwgbTtpKyspewogICAgICAgICAgICBzY2FuZigiICVjICVkIiwgJmMsICZrKTsKCiAgICAgICAgICAgIGlmKGMgPT0gJ0knKXsKICAgICAgICAgICAgICAgIGlmKGsgPj0gbGVhc3QpIHVwZGF0ZShJTkMray1kLCBJTkMray1kLCB0cnVlLCAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKGMgPT0gJ0EnKSBkICs9IGs7CiAgICAgICAgICAgIGVsc2UgaWYoYyA9PSAnUycpewogICAgICAgICAgICAgICAgaWYoIWspIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgbGZ0ICs9IHVwZGF0ZShJTkMrbGVhc3QtZCwgSU5DK2xlYXN0LWQray0xLCBmYWxzZSwgMSk7CiAgICAgICAgICAgICAgICBkIC09IGs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIGludCB0ZW1wID0gcXVlcnkoaywgMSk7CiAgICAgICAgICAgICAgICBpZih0ZW1wICE9IE1PRCooLTEpKSB0ZW1wICs9IGQ7CiAgICAgICAgICAgICAgICBlbHNlIHRlbXAgPSBJTkMtMTsKICAgICAgICAgICAgICAgIHByaW50ZigiJWRcbiIsIHRlbXAtSU5DKTsKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIHByaW50ZigiJWRcbiIsIGxmdCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K