#include <bits/stdc++.h>
using namespace std;
struct wut {
  int op;
  int val;
  int nval;
  wut() {}
  wut(int a, int b) : op(a), val(b) {}
};
struct node {
  long long sum[5];
  int ile;
  node() {
    for (int i = 0; i < (5); ++i) sum[i] = 0;
    ile = 0;
  }
};
const int N = 100010;
wut tab[N];
int n;
char tax[10];
int c;
set<int> h;
map<int, int> et;
node tree[3 * N];
int roz;
void insert(int value, int pos, bool add) {
  pos = roz + pos - 1;
  if (add) {
    tree[pos].sum[0] += value;
    tree[pos].ile++;
  } else {
    tree[pos].sum[0] -= value;
    tree[pos].ile--;
  }
  while (pos >> 1) {
    for (int i = 0; i < (5); ++i)
      tree[pos >> 1].sum[i] = tree[(pos >> 1) << 1].sum[i];
    for (int i = 0; i < (5); ++i) {
      tree[pos >> 1].sum[i] +=
          tree[((pos >> 1) << 1) + 1]
              .sum[(((i - tree[(pos >> 1) << 1].ile) % 5) + 5) % 5];
    }
    tree[pos >> 1].ile =
        tree[(pos >> 1) << 1].ile + tree[((pos >> 1) << 1) + 1].ile;
    pos >>= 1;
  }
}
long long query() { return tree[1].sum[2]; }
int main() {
  scanf("%d", &n);
  for (int i = 0; i < (n); ++i) {
    scanf("%s %d", tax, &c);
    if (tax[0] == 'a')
      tab[i] = wut(0, c);
    else if (tax[0] == 'd')
      tab[i] = wut(1, c);
    else
      tab[i] = wut(2, 0);
    if (tab[i].op <= 1) h.insert(tab[i].val);
  }
  int ind = 0;
  for (typeof((h).begin()) p = ((h).begin()); p != (h).end(); ++p) {
    et[*p] = ++ind;
  }
  for (int i = 0; i < (n); ++i)
    if (tab[i].op <= 1) {
      tab[i].nval = et[tab[i].val];
    }
  roz = 1;
  while (roz < ind) roz <<= 1;
  for (int i = 0; i < (n); ++i) {
    if (tab[i].op == 2) {
      cout << query() << endl;
    } else {
      insert(tab[i].val, tab[i].nval, !tab[i].op);
    }
  }
}
