#include <bits/stdc++.h>
using namespace std;
template <typename T>inline void read(T& t){
t=0; register char ch=getchar(); register int fflag=1;
while(!('0'<=ch&&ch<='9')){if(ch=='-') fflag=-1;ch=getchar();}
while(('0'<=ch&&ch<='9')){t=t*10+ch-'0'; ch=getchar();} t*=fflag;
}
template <typename T,typename... Args> inline void read(T& t, Args&... args){read(t);read(args...);}
const int N=1e6+1000;
int n,ans,m;
struct node{
int t,type,flag;
node(int t,int type,int flag):t(t),type(type),flag(flag){ }
node(){t=type=flag=0;}
}cnt[N];
struct Array_Tree{
int tr[N<<1];
void update(int p,const int k){
for(;p<(N<<1);p+=(p&-p))
tr[p]+=k;
}
int query(int l,int r){
int res=0;
for(;r;r-=(r&-r))
res+=tr[r];
for(l--;l;l-=(l&-l))
res-=tr[l];
return res;
}
}sma,lar;
int main(){
read(n);
while(n--){
string opt;
cin>>opt;
int a,b,c,t;
if(opt=="Add"){
read(a,b,c);
if(a==0&&b>c){
ans++;
cnt[++m]=node(0,1,1);
continue;
}
else if(a==0&&b<=c)cnt[++m]=node(0,-1,1);
else if(a>0){
t=floor((0.0+c-b)/a);
if(t>1e6)cnt[++m]=node(t,-1,1);
else if(t<-1e6)cnt[++m]=node(t,1,1),ans++;
else {
t+=N;
lar.update(t,1);
cnt[++m]=node(t,2,1);
}
}
else {
t=ceil((0.0+c-b)/a);
if(t>1e6)cnt[++m]=node(t,1,1),ans++;
else if(t<-1e6)cnt[++m]=node(t,-1,1);
else {
t+=N;
sma.update(t,1);
cnt[++m]=node(t,3,1);
}
}
}
else if(opt=="Del"){
read(a);
if(!cnt[a].flag)continue;
if(cnt[a].type==2)lar.update(cnt[a].t,-1);
else if(cnt[a].type==3)sma.update(cnt[a].t,-1);
else if(cnt[a].type==1)ans--;
cnt[a].flag=0;
}
else{
read(a);
printf("%d\n",lar.query(1,a+N)+sma.query(a+N,N*2-2)+ans);
}
}
return 0;
}