#include <bits/stdc++.h>
using namespace std;
long long height;
long long width;
set<long long> h_point;
set<long long> w_point;
multiset<long long> h_seg;
multiset<long long> w_seg;
void _init(long long h, long long w) {
  h_point.insert(h);
  h_point.insert(0);
  w_point.insert(w);
  w_point.insert(0);
  h_seg.insert(h);
  w_seg.insert(w);
  height = h;
  width = w;
}
void devideH(long long m) {
  if (m >= height || m <= 0) return;
  auto p = h_point.upper_bound(m);
  long long int_a = *p - m;
  long long int_b = m - *(--p);
  h_point.insert(m);
  auto i = h_seg.find(int_a + int_b);
  if (i != h_seg.end()) {
    h_seg.erase(i);
    h_seg.insert(int_a);
    h_seg.insert(int_b);
  } else {
    cout << "Wrong In H!" << endl;
  }
}
void devideW(long long n) {
  if (n >= width || n <= 0) return;
  auto q = w_point.upper_bound(n);
  long long int_a = *q - n;
  long long int_b = n - *(--q);
  w_point.insert(n);
  auto j = w_seg.find(int_a + int_b);
  if (j != w_seg.end()) {
    w_seg.erase(j);
    w_seg.insert(int_a);
    w_seg.insert(int_b);
  } else {
    cout << "Wrong In W!" << endl;
  }
}
long long get_area() {
  auto h = *h_seg.rbegin();
  auto w = *w_seg.rbegin();
  return h * w;
}
int main() {
  long long w, h, n, l;
  char c;
  cin >> w >> h >> n;
  _init(h, w);
  for (int i = 0; i < n; i++) {
    cin >> c >> l;
    if (c == 'H') devideH(l);
    if (c == 'V') devideW(l);
    cout << get_area() << endl;
  }
  return 0;
}
