#include <bits/stdc++.h>
using namespace std;
int tree[2000000 + 7], MaxVal, tree1[2000000 + 7], flag[2000000 + 7],
    flag1[2000000 + 7];
char aa[100];
priority_queue<int> PQ, PQ1;
void update1(int idx, int val) {
  while (idx <= MaxVal) {
    tree1[idx] += val;
    idx += (idx & -idx);
  }
}
int read1(int idx) {
  int sum = 0;
  while (idx > 0) {
    sum += tree1[idx];
    idx -= (idx & -idx);
  }
  return sum;
}
int findG1(int cumFre) {
  int idx = 0;
  int bitMask;
  bitMask = 1 << ((int)log2(MaxVal));
  while ((bitMask != 0) && (idx < MaxVal)) {
    int tIdx = idx + bitMask;
    if (cumFre >= tree1[tIdx] && idx + bitMask <= MaxVal) {
      idx = tIdx;
      cumFre -= tree1[tIdx];
    }
    bitMask >>= 1;
  }
  if (cumFre != 0)
    return -1;
  else
    return idx;
}
void update(int idx, int val) {
  while (idx <= MaxVal) {
    tree[idx] += val;
    idx += (idx & -idx);
  }
}
int read(int idx) {
  int sum = 0;
  while (idx > 0) {
    sum += tree[idx];
    idx -= (idx & -idx);
  }
  return sum;
}
int findG(int cumFre) {
  int idx = 0;
  int bitMask;
  bitMask = 1 << ((int)log2(MaxVal));
  while ((bitMask != 0) && (idx < MaxVal)) {
    int tIdx = idx + bitMask;
    if (cumFre >= tree[tIdx] && idx + bitMask <= MaxVal) {
      idx = tIdx;
      cumFre -= tree[tIdx];
    }
    bitMask >>= 1;
  }
  if (cumFre != 0)
    return -1;
  else
    return idx;
}
int main() {
  int W, H, N, K, curr, before, after;
  long long ANS;
  MaxVal = 200005;
  cin >> W >> H >> N;
  update(1, 1);
  update(W + 1, 1);
  update1(1, 1);
  update1(H + 1, 1);
  PQ1.push(H);
  PQ.push(W);
  while (N--) {
    scanf("%s%d", &aa, &K);
    K++;
    if (aa[0] == 'V') {
      curr = read(K);
      if (curr == 1)
        before = 1;
      else
        before = findG(curr - 1) + 1;
      after = findG(curr) + 1;
      flag[after - before]++;
      PQ.push(after - K);
      PQ.push(K - before);
      update(K, 1);
    } else {
      curr = read1(K);
      if (curr == 1)
        before = 1;
      else
        before = findG1(curr - 1) + 1;
      after = findG1(curr) + 1;
      flag1[after - before]++;
      PQ1.push(after - K);
      PQ1.push(K - before);
      update1(K, 1);
    }
    {
      while (flag[PQ.top()]) {
        flag[PQ.top()]--;
        PQ.pop();
      }
    }
    {
      while (flag1[PQ1.top()]) {
        flag1[PQ1.top()]--;
        PQ1.pop();
      }
    }
    ANS = 1LL * PQ.top() * 1LL * PQ1.top();
    cout << ANS << endl;
  }
}
