#include <bits/stdc++.h>
const int maxn = 1e5 + 10;
const int inf = 1e9 + 10;
using namespace std;
struct node {
  long long s[5];
  long long lazy;
  node() {
    for (int i = 0; i < 5; i++) s[i] = 0;
    lazy = 0;
  }
};
node seg[maxn * 4];
int m(int l, int r) { return (l + r) / 2; }
void merge(int pos) {
  for (int i = 0; i < 5; i++)
    seg[pos].s[i] = seg[pos * 2].s[i] + seg[pos * 2 + 1].s[i];
}
void refresh(int pos, int l, int r) {
  int k = seg[pos].lazy;
  seg[pos].lazy = 0;
  if (k == 0) return;
  long long aux[5];
  for (int i = 0; i < 5; i++) aux[i] = seg[pos].s[i];
  for (int i = 0; i < 5; i++) seg[pos].s[i] = aux[(i - k + inf) % 5];
  if (l == r) return;
  seg[pos * 2].lazy += k;
  seg[pos * 2 + 1].lazy += k;
}
void pointUpd(int pos, int l, int r, int x, long long val, int ind) {
  refresh(pos, l, r);
  if (l > x || r < x) return;
  if (l == r) {
    for (int i = 0; i < 5; i++) seg[pos].s[i] = 0;
    seg[pos].s[ind] = val;
    return;
  }
  pointUpd(pos * 2, l, m(l, r), x, val, ind);
  pointUpd(pos * 2 + 1, m(l, r) + 1, r, x, val, ind);
  merge(pos);
}
void intervalUpd(int pos, int l, int r, int beg, int en, long long val) {
  refresh(pos, l, r);
  if (l > en || r < beg) return;
  if (l >= beg && r <= en) {
    seg[pos].lazy += val;
    refresh(pos, l, r);
    return;
  }
  intervalUpd(pos * 2, l, m(l, r), beg, en, val);
  intervalUpd(pos * 2 + 1, m(l, r) + 1, r, beg, en, val);
  merge(pos);
}
void print(int pos, int l, int r) {
  printf("About interval %d - %d : ", l, r);
  for (int i = 0; i < 5; i++) printf("%lld ", seg[pos].s[i]);
  cout << endl;
  if (l == r) return;
  print(pos * 2, l, m(l, r));
  print(pos * 2 + 1, m(l, r) + 1, r);
}
int bit[maxn];
void upd(int x, int v) {
  for (int i = x; i < maxn; i += (i & -i)) bit[i] += v;
}
int query(int x) {
  int tot = 0;
  for (int i = x; i > 0; i -= (i & -i)) tot += bit[i];
  return tot;
}
int n;
pair<string, int> a[maxn];
map<int, int> mapa;
vector<int> temporary;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i].first;
    if (a[i].first == "sum") continue;
    cin >> a[i].second;
    if (a[i].first == "add") temporary.push_back(a[i].second);
  }
  int chave = 1;
  sort(temporary.begin(), temporary.end());
  for (int i = 0; i < temporary.size(); i++)
    if (mapa.find(temporary[i]) == mapa.end())
      mapa.insert(make_pair(temporary[i], chave++));
  for (int i = 0; i < n; i++) {
    if (a[i].first == "sum") {
      refresh(1, 0, maxn);
      cout << seg[1].s[3] << endl;
      continue;
    }
    int k = mapa.find(a[i].second)->second;
    if (a[i].first == "add") {
      upd(k, 1);
      int ind = query(k) % 5;
      intervalUpd(1, 0, maxn, k + 1, maxn, 1);
      pointUpd(1, 0, maxn, k, a[i].second, ind);
    } else {
      upd(k, -1);
      intervalUpd(1, 0, maxn, k + 1, maxn, -1);
      pointUpd(1, 0, maxn, k, 0, 0);
    }
  }
}
