#include <bits/stdc++.h>
using namespace std;
int main() {
  long long w, h, n, x;
  char c;
  long long maxH, maxV, pre, pos, len;
  set<long long> cutsH;
  set<long long> cutsV;
  set<long long>::iterator sIt;
  map<long long, long long> lengthsH;
  map<long long, long long> lengthsV;
  map<long long, long long>::iterator mIt;
  scanf("%lld %lld %lld", &w, &h, &n);
  cutsH.insert(0);
  cutsH.insert(h);
  lengthsH[h] = 1;
  maxH = h;
  cutsV.insert(0);
  cutsV.insert(w);
  lengthsV[w] = 1;
  maxV = w;
  while (n--) {
    cin >> c;
    scanf("%lld", &x);
    if (c == 'H') {
      cutsH.insert(x);
      sIt = cutsH.find(x);
      --sIt;
      pre = *sIt;
      ++sIt;
      ++sIt;
      pos = *sIt;
      len = pos - pre;
      if (lengthsH.count(x - pre) != 0) {
        lengthsH[x - pre]++;
      } else {
        lengthsH[x - pre] = 1;
      }
      if (lengthsH.count(pos - x) != 0) {
        lengthsH[pos - x]++;
      } else {
        lengthsH[pos - x] = 1;
      }
      lengthsH[len]--;
      if (lengthsH[len] == 0) {
        lengthsH.erase(len);
        mIt = lengthsH.end();
        mIt--;
        maxH = mIt->first;
      }
    } else {
      cutsV.insert(x);
      sIt = cutsV.find(x);
      --sIt;
      pre = *sIt;
      ++sIt;
      ++sIt;
      pos = *sIt;
      len = pos - pre;
      if (lengthsV.count(x - pre) != 0) {
        lengthsV[x - pre]++;
      } else {
        lengthsV[x - pre] = 1;
      }
      if (lengthsV.count(pos - x) != 0) {
        lengthsV[pos - x]++;
      } else {
        lengthsV[pos - x] = 1;
      }
      lengthsV[len]--;
      if (lengthsV[len] == 0) {
        lengthsV.erase(len);
        mIt = lengthsV.end();
        mIt--;
        maxV = mIt->first;
      }
    }
    printf("%lld\n", maxH * maxV);
  }
  return 0;
}
