#include <bits/stdc++.h>
const int MAX_N = 1e5;
struct Segt {
  int l, r;
  Segt *lc, *rc;
  int sum;
  long long a[5];
  Segt(int l, int r, Segt *lc, Segt *rc) : l(l), r(r), lc(lc), rc(rc), sum(0) {
    memset(a, 0, sizeof(a));
  }
  void update() {
    sum = lc->sum + rc->sum;
    memset(a, 0, sizeof(a));
    int d = lc->sum % 5;
    for (int i = 0; i < 5; i++) {
      a[i] += lc->a[i];
      a[i] += rc->a[(i - d + 5) % 5];
    }
  }
  void add(int pos, int val) {
    if (l == r) {
      sum = 1;
      a[1] = val;
    } else {
      int mid = l + (r - l) / 2;
      if (pos <= mid)
        lc->add(pos, val);
      else if (pos > mid)
        rc->add(pos, val);
      update();
    }
  }
  void del(int pos, int val) {
    if (l == r) {
      sum = 0;
      a[1] = 0;
    } else {
      int mid = l + (r - l) / 2;
      if (pos <= mid)
        lc->del(pos, val);
      else if (pos > mid)
        rc->del(pos, val);
      update();
    }
  }
  static Segt *build(int l, int r) {
    if (l == r)
      return new Segt(l, r, NULL, NULL);
    else {
      int mid = l + (r - l) / 2;
      return new Segt(l, r, build(l, mid), build(mid + 1, r));
    }
  }
} * segt;
struct Node {
  int l, r;
  int sum;
  long long a[5];
} a[MAX_N << 2];
void update(int rt) {
  a[rt].sum = a[rt << 1].sum + a[rt << 1 | 1].sum;
  memset(a[rt].a, 0, sizeof(a[rt].a));
  int d = a[rt << 1].sum % 5;
  for (int i = 0; i < 5; i++) {
    a[rt].a[i] += a[rt << 1].a[i];
    a[rt].a[i] += a[rt << 1 | 1].a[(i - d + 5) % 5];
  }
}
void add(int rt, int pos, int val) {
  if (a[rt].l == a[rt].r) {
    a[rt].sum = 1;
    a[rt].a[1] = val;
  } else {
    int mid = a[rt].l + (a[rt].r - a[rt].l) / 2;
    if (pos <= mid)
      add(rt << 1, pos, val);
    else if (pos > mid)
      add(rt << 1 | 1, pos, val);
    update(rt);
  }
}
void del(int rt, int pos, int val) {
  if (a[rt].l == a[rt].r) {
    a[rt].sum = 0;
    a[rt].a[1] = 0;
  } else {
    int mid = a[rt].l + (a[rt].r - a[rt].l) / 2;
    if (pos <= mid)
      del(rt << 1, pos, val);
    else if (pos > mid)
      del(rt << 1 | 1, pos, val);
    update(rt);
  }
}
void build(int rt, int l, int r) {
  if (r < l) return;
  a[rt].l = l, a[rt].r = r;
  if (l == r) return;
  int mid = l + (r - l) / 2;
  build(rt << 1, l, mid);
  build(rt << 1 | 1, mid + 1, r);
}
int n;
struct Operation {
  int type, x;
} opt[MAX_N + 1];
int tmp[MAX_N + 1], tot;
std::map<int, int> mp;
int main() {
  scanf("%d", &n);
  char s[10];
  for (int i = 1; i <= n; i++) {
    scanf("%s", s);
    if (s[0] == 'a') {
      opt[i].type = 1;
      scanf("%d", &opt[i].x);
      tmp[++tot] = opt[i].x;
    } else if (s[0] == 'd') {
      opt[i].type = 2;
      scanf("%d", &opt[i].x);
    } else if (s[0] == 's') {
      opt[i].type = 3;
    }
  }
  std::sort(tmp + 1, tmp + tot + 1);
  tot = std::unique(tmp + 1, tmp + tot + 1) - tmp - 1;
  build(1, 1, tot);
  for (int i = 1; i <= tot; i++) mp[tmp[i]] = i;
  for (int i = 1; i <= n; i++) {
    if (opt[i].type == 1) {
      add(1, mp[opt[i].x], opt[i].x);
    } else if (opt[i].type == 2) {
      del(1, mp[opt[i].x], opt[i].x);
    } else if (opt[i].type == 3) {
      printf("%I64d\n", a[1].a[3]);
    }
  }
  return 0;
}
