#include <bits/stdc++.h>
using namespace std;
void solve(int test_number);
int main() {
  cout.setf(ios::fixed);
  cout.precision(9);
  cerr.setf(ios::fixed);
  cerr.precision(3);
  int n = 1;
  for (int i = 0; i < n; i++) {
    solve(i + 1);
  }
  return 0;
}
int h, w;
set<pair<int, int> > vert_parts;
set<pair<int, int> > hor_parts;
multiset<int> vert, hor;
inline int get_max(multiset<int> &q) {
  auto it = q.end();
  it--;
  return *it;
}
void solve(int test_number) {
  int q;
  scanf("%d%d%d\n", &w, &h, &q);
  vert_parts.insert(make_pair(0, w));
  hor_parts.insert(make_pair(0, h));
  vert.insert(w);
  hor.insert(h);
  for (int i = 0; i < q; i++) {
    char c;
    int pos;
    scanf("%c %d\n", &c, &pos);
    if (c == 'H') {
      auto it = hor_parts.lower_bound(make_pair(pos, -1));
      it--;
      pair<int, int> cur = *it;
      hor_parts.erase(it);
      hor.erase(hor.find(cur.second - cur.first));
      hor_parts.insert(make_pair(cur.first, pos));
      hor_parts.insert(make_pair(pos, cur.second));
      hor.insert(pos - cur.first);
      hor.insert(cur.second - pos);
    } else {
      auto it = vert_parts.lower_bound(make_pair(pos, -1));
      it--;
      pair<int, int> cur = *it;
      vert_parts.erase(it);
      vert.erase(vert.find(cur.second - cur.first));
      vert_parts.insert(make_pair(cur.first, pos));
      vert_parts.insert(make_pair(pos, cur.second));
      vert.insert(pos - cur.first);
      vert.insert(cur.second - pos);
    }
    int V = get_max(vert);
    int H = get_max(hor);
    printf("%I64d\n", (long long)H * (long long)V);
  }
}
