#include <bits/stdc++.h>
using namespace std;
const int ms = 4e5 + 5, inf = 0x3f3f3f3f;
map<int, int> tipo;
map<int, int> pos;
int inicioIdx[ms], sz[ms];
int seg[4 * ms], lazy[4 * ms];
int ciclo[ms], posicaoNoCiclo[ms];
void build(int idxI, int idx, int l, int r) {
  int mid = (l + r) / 2, left = 2 * idx + 1, right = 2 * idx + 2;
  lazy[idx + idxI] = -1;
  if (l == r) {
    seg[idx + idxI] = l;
    return;
  }
  build(idxI, left, l, mid);
  build(idxI, right, mid + 1, r);
}
int query(int idxI, int x, int idx, int l, int r) {
  int mid = (l + r) / 2, left = 2 * idx + 1, right = 2 * idx + 2;
  if (~lazy[idx + idxI]) {
    if (l < r) {
      lazy[left + idxI] = lazy[idx + idxI];
      lazy[right + idxI] = lazy[idx + idxI];
    } else {
      seg[idx + idxI] = lazy[idx + idxI];
    }
    lazy[idx + idxI] = -1;
  }
  if (x < l || x > r) return -1;
  if (l == r) return seg[idx + idxI];
  return max(query(idxI, x, left, l, mid), query(idxI, x, right, mid + 1, r));
}
void update(int idxI, int V, int L, int R, int idx, int l, int r) {
  int mid = (l + r) / 2, left = 2 * idx + 1, right = 2 * idx + 2;
  if (~lazy[idx + idxI]) {
    if (l < r) {
      lazy[left + idxI] = lazy[idx + idxI];
      lazy[right + idxI] = lazy[idx + idxI];
    } else {
      seg[idx + idxI] = lazy[idx + idxI];
    }
    lazy[idx + idxI] = -1;
  }
  if (l > R || r < L) return;
  if (L <= l && r <= R) {
    if (l < r) {
      lazy[left + idxI] = V;
      lazy[right + idxI] = V;
    } else {
      seg[idx + idxI] = V;
    }
    return;
  }
  update(idxI, V, L, R, left, l, mid);
  update(idxI, V, L, R, right, mid + 1, r);
}
int buscaBinaria(int t, int p) {
  int n = sz[t], idxInicial = inicioIdx[t];
  int l = p + 1, r = p + n;
  while (r - l > 1) {
    int m = (l + r) / 2;
    int check = query(idxInicial, m % n, 0, 0, n - 1);
    if (check == p)
      r = m;
    else
      l = m;
  }
  int check = query(idxInicial, l % n, 0, 0, n - 1);
  if (check == p) {
    return l % n;
  } else {
    return r % n;
  }
}
int main() {
  cin.tie(0);
  cin.sync_with_stdio(false);
  int h, m, n, ans = 0;
  cin >> h >> m >> n;
  int zzz = 0;
  int ciclosAteAgora = 0;
  int cnt = 0;
  for (int i = 0; i < h; i++) {
    int pos = i;
    if (!ciclo[pos]) ++ciclosAteAgora;
    for (int j = 0; ciclo[pos] == 0; j++) {
      ciclo[pos] = ciclosAteAgora;
      posicaoNoCiclo[pos] = j;
      sz[ciclosAteAgora]++;
      cnt++;
      pos = (pos + m) % h;
    }
  }
  for (int i = 1; i <= ciclosAteAgora; i++) {
    int qnt = sz[i];
    inicioIdx[i] = zzz;
    zzz += 4 * qnt;
    build(inicioIdx[i], 0, 0, sz[i] - 1);
  }
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    if (s == "+") {
      int hash, id;
      cin >> id >> hash;
      int t = ciclo[hash], p = posicaoNoCiclo[hash];
      int posicaoInserir = query(inicioIdx[t], p, 0, 0, sz[t] - 1);
      pos[id] = posicaoInserir;
      tipo[id] = t;
      ans += (posicaoInserir + sz[t] - p) % sz[t];
      int apos =
          query(inicioIdx[t], (posicaoInserir + 1) % sz[t], 0, 0, sz[t] - 1);
      if (apos == posicaoInserir) {
        update(inicioIdx[t], inf, 0, sz[t] - 1, 0, 0, sz[t] - 1);
        continue;
      }
      int inicioUpdate = buscaBinaria(t, posicaoInserir);
      if (inicioUpdate > posicaoInserir) {
        update(inicioIdx[t], apos, inicioUpdate, sz[t] - 1, 0, 0, sz[t] - 1);
        update(inicioIdx[t], apos, 0, posicaoInserir, 0, 0, sz[t] - 1);
      } else {
        update(inicioIdx[t], apos, inicioUpdate, posicaoInserir, 0, 0,
               sz[t] - 1);
      }
    } else {
      int id;
      cin >> id;
      int t = tipo[id], p = pos[id];
      int posicaoApos = query(inicioIdx[t], p, 0, 0, sz[t] - 1);
      if (posicaoApos == inf) {
        update(inicioIdx[t], p, 0, sz[t] - 1, 0, 0, sz[t] - 1);
        continue;
      }
      int inicioUpdate = buscaBinaria(t, posicaoApos);
      if (inicioUpdate > p) {
        update(inicioIdx[t], p, inicioUpdate, sz[t] - 1, 0, 0, sz[t] - 1);
        update(inicioIdx[t], p, 0, p, 0, 0, sz[t] - 1);
      } else {
        update(inicioIdx[t], p, inicioUpdate, p, 0, 0, sz[t] - 1);
      }
    }
  }
  cout << ans << '\n';
  return 0;
}
