//离线线段树上的子节点到父节点的状态转移,转移方程为:btree[i].sum[j]=btree[i<<1].sum[j]+btree[i<<1|1].sum[(j+5-(btree[i<<1].cnt)%5)%5];
//代码如下:
#include <stdio.h>
#include <string.h>
#include <map>
#include <algorithm>
using namespace std;
#define N 100010
struct tree
{
__int64 sum[5];
int cnt;
}btree[4*N];
int num[N];
void build(int i,int l,int r)
{
int j,mid=(l+r)>>1;
for(j=0;j<5;j++)
btree[i].sum[j]=0;
btree[i].cnt=0;
if(l==r)return;
else
{
build(i<<1,l,mid);
build(i<<1|1,mid+1,r);
}
}
void update(int i,int l,int r,int p,int v)
{
int mid=(l+r)>>1,j;
btree[i].cnt+=v;
if(l==r)
{
if(btree[i].cnt)
btree[i].sum[1]=num[p];
else
btree[i].sum[1]=0;
return;
}
else
{
if(p<=mid)update(i<<1,l,mid,p,v);
else update(i<<1|1,mid+1,r,p,v);
}
for(j=0;j<5;j++)
btree[i].sum[j]=btree[i<<1].sum[j]+btree[i<<1|1].sum[(j+5-(btree[i<<1].cnt)%5)%5];
}
struct node
{
int type;
int d;
}data[N];
int main (void)
{
char op[5];
int n,i,ant;
while (scanf( "%d", &n )!=EOF)
{
ant=0;
map <int,int> p;
for(i=1;i<=n;i++)
{
scanf("%s",op);
if(!strcmp(op,"add"))
{
data[i].type=1;
scanf("%d",&data[i].d);
num[ant++]=data[i].d;
}
else if(!strcmp(op,"del"))
{
scanf("%d",&data[i].d);
data[i].type=2;
}
else
data[i].type=3;
}
sort(num,num+ant);
for(i=0;i<ant;i++)
p[num[i]]=i;
build(1,1,ant);
for(i=1;i<=n;i++)
{
if(data[i].type==1)
{
update(1,1,ant,p[data[i].d],1);
}
else if(data[i].type==2)
{
update(1,1,ant,p[data[i].d],-1);
}
else
{
printf("%I64d\n",btree[1].sum[3]);
}
}
}
return 0;
}