#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000000;
const int NMAX = 1 << 17;
int n, m;
int cnt[2 * NMAX];
long long w[5][2 * NMAX];
void create_tree() {
  m = 1;
  while (m < n) m *= 2;
  for (int i = 0, _n = (5); i < _n; ++i) fill_n(w[i], 2 * m, 0);
  fill_n(cnt, 2 * m, 0);
}
inline void update_node(int u) {
  cnt[u] = cnt[2 * u] + cnt[2 * u + 1];
  for (int i = 0, _n = (5); i < _n; ++i) {
    int nind = (i - cnt[2 * u]) % 5;
    if (nind < 0) nind += 5;
    w[i][u] = w[i][2 * u] + w[nind][2 * u + 1];
  }
}
void add_tree(int ind, int val) {
  int vi = m + ind;
  w[0][vi] = val;
  cnt[vi] = 1;
  vi /= 2;
  while (vi != 0) {
    update_node(vi);
    vi /= 2;
  }
}
void remove_tree(int ind) {
  int vi = m + ind;
  w[0][vi] = 0;
  cnt[vi] = 0;
  vi /= 2;
  while (vi != 0) {
    update_node(vi);
    vi /= 2;
  }
}
inline long long check_tree() { return w[2][1]; }
const int QMAX = 100000;
enum { ADD, DEL, SUM };
struct query {
  int x, type;
};
query Q[QMAX];
int nums[QMAX];
int main() {
  int N;
  scanf("%d", &N);
  for (int i = 0, _n = (N); i < _n; ++i) {
    static char buf[100];
    scanf("%s", buf);
    if (buf[0] == 's')
      Q[i].type = SUM;
    else if (buf[0] == 'a') {
      Q[i].type = ADD;
      scanf("%d", &Q[i].x);
    } else {
      Q[i].type = DEL;
      scanf("%d", &Q[i].x);
    }
  }
  int NN = 0;
  for (int i = 0, _n = (N); i < _n; ++i)
    if (Q[i].type != SUM) nums[NN++] = Q[i].x;
  sort(nums, nums + NN);
  NN = unique(nums, nums + NN) - nums;
  ::n = NN;
  create_tree();
  for (int i = 0, _n = (N); i < _n; ++i)
    if (Q[i].type == SUM) {
      printf("%I64d\n", check_tree());
    } else if (Q[i].type == ADD) {
      int ind = lower_bound(nums, nums + NN, Q[i].x) - nums;
      add_tree(ind, Q[i].x);
    } else {
      int ind = lower_bound(nums, nums + NN, Q[i].x) - nums;
      remove_tree(ind);
    }
}
