#include <bits/stdc++.h>
using namespace std;
const int inf(1010101010);
struct node_t {
  int yy;
  node_t *l, *r;
  int val, card;
  long long som[5];
  inline void upd() {
    for (int i(0); i < (5); i++) som[i] = 0;
    int sh(l ? l->card : 0);
    som[sh % 5] += val;
    if (l)
      for (int i(0); i < (5); i++) som[i] += l->som[i];
    if (r)
      for (int i(0); i < (5); i++) som[(i + sh + 1) % 5] += r->som[i];
    card = 1 + (l ? l->card : 0) + (r ? r->card : 0);
  }
};
typedef pair<node_t *, node_t *> np;
node_t nodes[100005];
int treapused;
node_t *root;
void reset() {
  root = 0;
  treapused = 0;
}
node_t *new_node(int val) {
  node_t *node(&nodes[treapused++]);
  node->l = node->r = 0;
  node->yy = rand();
  node->val = val;
  node->upd();
  return node;
}
np split(node_t *t, int val) {
  if (!t) {
    return np(0, 0);
  }
  if (t->val < val) {
    np p1(split(t->r, val));
    t->r = p1.first, t->upd();
    return np(t, p1.second);
  } else {
    np p1(split(t->l, val));
    t->l = p1.second, t->upd();
    return np(p1.first, t);
  }
}
node_t *merge(node_t *l, node_t *r) {
  if (!l) {
    return r;
  }
  if (!r) {
    return l;
  }
  if (l->yy < r->yy) {
    l->r = merge(l->r, r);
    l->upd();
    return l;
  } else {
    r->l = merge(l, r->l);
    r->upd();
    return r;
  }
}
char cmd[20];
int main() {
  reset();
  int q;
  cin >> q;
  while (q--) {
    scanf("%s", cmd);
    if (cmd[0] == 's') {
      cout << (root ? root->som[2] : 0) << endl;
    }
    if (cmd[0] == 'a') {
      int x;
      scanf("%d", &x);
      np bla(split(root, x));
      root = merge(merge(bla.first, new_node(x)), bla.second);
    }
    if (cmd[0] == 'd') {
      int x;
      scanf("%d", &x);
      np bla(split(root, x));
      np bla2(split(bla.second, x + 1));
      root = merge(bla.first, bla2.second);
    }
  }
}
