#include <bits/stdc++.h>
using namespace std;
struct Task {
  char order;
  int x, val;
};
struct Ttree {
  int tot;
  long long val[5];
};
const int maxn = 100007;
int n;
Task ask[maxn];
Ttree tree[maxn * 4];
map<int, int> X;
void init() {
  char s[7];
  for (int i = 1; i <= n; i++) {
    scanf("%s", s);
    if (s[0] != 's') {
      int x;
      scanf("%d", &x);
      ask[i].val = x;
    }
    ask[i].order = s[0];
  }
  X.clear();
  for (int i = 1; i <= n; i++)
    if (ask[i].order != 's') X[ask[i].val];
  int total = 0;
  for (map<int, int>::iterator it = X.begin(); it != X.end(); it++)
    it->second = ++total;
  for (int i = 1; i <= n; i++)
    if (ask[i].order != 's') ask[i].x = X[ask[i].val];
}
void build(int mark, int L, int R) {
  tree[mark].tot = 0;
  for (int i = 0; i < 5; i++) tree[mark].val[i] = 0;
  if (L == R) return;
  int mid = (L + R) / 2;
  build(mark * 2, L, mid);
  build(mark * 2 + 1, mid + 1, R);
}
void update(Ttree &mid, Ttree L, Ttree R) {
  for (int i = 0; i < 5; i++) mid.val[i] = L.val[i];
  for (int i = 0; i < 5; i++) mid.val[(i + L.tot) % 5] += R.val[i];
  mid.tot = L.tot + R.tot;
}
void insert(int mark, int L, int R, int x, int val, int order) {
  if (L == R) {
    if (order == 1) {
      tree[mark].tot += order;
      tree[mark].val[tree[mark].tot % 5] += order * val;
    } else {
      tree[mark].val[tree[mark].tot % 5] += order * val;
      tree[mark].tot += order;
    }
    return;
  }
  int mid = (L + R) / 2;
  if (x <= mid)
    insert(mark * 2, L, mid, x, val, order);
  else
    insert(mark * 2 + 1, mid + 1, R, x, val, order);
  update(tree[mark], tree[mark * 2], tree[mark * 2 + 1]);
}
void work() {
  init();
  build(1, 1, n);
  for (int i = 1; i <= n; i++)
    if (ask[i].order == 'a')
      insert(1, 1, n, ask[i].x, ask[i].val, 1);
    else if (ask[i].order == 'd')
      insert(1, 1, n, ask[i].x, ask[i].val, -1);
    else
      cout << tree[1].val[3] << endl;
}
int main() {
  while (scanf("%d", &n) != EOF) work();
}
