#include <bits/stdc++.h>
using namespace std;
const int N = 200000 + 5;
const int mod = 1000000000 + 7;
int read(int &a) {
  scanf("%d", &a);
  return a;
}
int read(int &a, int &b) {
  scanf("%d %d", &a, &b);
  return a;
}
int w, h, n;
int L[N << 2][2];
int R[N << 2][2];
int Max[N << 2][2];
bool pure[N << 2][2];
void pushup(int, int);
void build(int l, int r, int rt, int k) {
  if (l == r) {
    L[rt][k] = R[rt][k] = Max[rt][k] = 1;
    pure[rt][k] = 1;
    return;
  }
  int m = (l + r) >> 1;
  build(l, m, rt << 1, k);
  build(m + 1, r, rt << 1 | 1, k);
  pushup(rt, k);
}
void pushup(int rt, int k) {
  Max[rt][k] = max((R[rt << 1][k] + L[rt << 1 | 1][k]),
                   max(Max[rt << 1][k], Max[rt << 1 | 1][k]));
  L[rt][k] =
      pure[rt << 1][k] ? L[rt << 1][k] + L[rt << 1 | 1][k] : L[rt << 1][k];
  R[rt][k] = pure[rt << 1 | 1][k] ? R[rt << 1][k] + R[rt << 1 | 1][k]
                                  : R[rt << 1 | 1][k];
  pure[rt][k] = pure[rt << 1][k] && pure[rt << 1 | 1][k];
}
void update(int x, int l, int r, int rt, int k) {
  if (l == r) {
    L[rt][k] = R[rt][k] = Max[rt][k] = pure[rt][k] = 0;
    return;
  }
  int m = (l + r) >> 1;
  if (x <= m)
    update(x, l, m, rt << 1, k);
  else
    update(x, m + 1, r, rt << 1 | 1, k);
  pushup(rt, k);
}
int main() {
  read(w), read(h), read(n);
  char c;
  int x;
  build(1, w - 1, 1, 0);
  build(1, h - 1, 1, 1);
  while (n--) {
    getchar();
    scanf("%c %d", &c, &x);
    if (c == 'V')
      update(x, 1, w - 1, 1, 0);
    else
      update(x, 1, h - 1, 1, 1);
    printf("%lld\n", (long long)(Max[1][0] + 1) * (Max[1][1] + 1));
  }
  return 0;
}
