#include <bits/stdc++.h>
using namespace std;
int w, h, n;
struct seg {
  int l, r;
  bool operator<(const seg &p) const { return r - l < p.r - p.l; }
};
struct BIT {
  int n, a[200001];
  void init(int size) { n = size; }
  void insert(int x) {
    for (int i = x; i <= n; i += i & -i) a[i]++;
  }
  int query(seg s) {
    int ret = 0;
    for (int i = s.l; i; i -= i & -i) ret -= a[i];
    for (int i = s.r - 1; i; i -= i & -i) ret += a[i];
    return ret;
  }
} hB, wB;
set<int> W, H;
priority_queue<seg> hQ, wQ;
int wmax() {
  while (wB.query(wQ.top())) wQ.pop();
  seg top = wQ.top();
  return top.r - top.l;
}
int hmax() {
  while (hB.query(hQ.top())) hQ.pop();
  seg top = hQ.top();
  return top.r - top.l;
}
int main() {
  scanf("%d%d%d", &w, &h, &n);
  W.insert(0);
  W.insert(w);
  H.insert(0);
  H.insert(h);
  wQ.push((seg){0, w});
  hQ.push((seg){0, h});
  wB.init(w);
  hB.init(h);
  for (int i = 1; i <= n; i++) {
    char c[21];
    int d;
    scanf("%s %d", c, &d);
    if (c[0] == 'H') {
      d = h - d;
      H.insert(d);
      set<int>::iterator it = H.find(d);
      it--;
      int pre = *it;
      it++;
      it++;
      int suf = *it;
      hB.insert(d);
      hQ.push((seg){pre, d});
      hQ.push((seg){d, suf});
    } else {
      d = w - d;
      W.insert(d);
      set<int>::iterator it = W.find(d);
      it--;
      int pre = *it;
      it++;
      it++;
      int suf = *it;
      wB.insert(d);
      wQ.push((seg){pre, d});
      wQ.push((seg){d, suf});
    }
    printf("%I64d\n", (long long)wmax() * hmax());
  }
  return 0;
}
