#include <bits/stdc++.h>
using std::lower_bound;
using std::max;
using std::min;
using std::set;
using std::sort;
using std::swap;
using std::unique;
template <typename T>
void read(T &x) {
  int flag = 1;
  x = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') flag = -flag;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  x *= flag;
}
const int _ = 2e5 + 10;
int W, H, n, w[_], h[_];
int main() {
  read(W), read(H), read(n);
  set<int> sw, sh, qw, qh;
  sw.insert(W), sw.insert(-W);
  sh.insert(H), sh.insert(-H);
  qw.insert(0), qw.insert(W), qw.insert(-W);
  qh.insert(0), qh.insert(H), qh.insert(-H);
  ++w[W], ++h[H];
  char ch[3];
  int x;
  for (int i = 1; i <= n; ++i) {
    scanf("%s%d", ch, &x);
    if (ch[0] == 'H') {
      qh.insert(x), qh.insert(-x);
      int r = *(qh.upper_bound(x));
      int l = -*(qh.upper_bound(-x));
      if (h[r - l]) --h[r - l];
      if (!h[r - l]) sh.erase(r - l), sh.erase(l - r);
      sh.insert(x - l), ++h[x - l];
      sh.insert(r - x), ++h[r - x];
      sh.insert(l - x), sh.insert(x - r);
    } else {
      qw.insert(x), qw.insert(-x);
      int r = *(qw.upper_bound(x));
      int l = -*(qw.upper_bound(-x));
      if (w[r - l]) --w[r - l];
      if (!w[r - l]) sw.erase(r - l), sw.erase(l - r);
      sw.insert(x - l), ++w[x - l];
      sw.insert(r - x), ++w[r - x];
      sw.insert(l - x), sw.insert(x - r);
    }
    set<int>::iterator r1, r2;
    r1 = sh.begin(), r2 = sw.begin();
    printf("%lld\n", (long long)(*r1) * (*r2));
  }
  return 0;
}
