#include <bits/stdc++.h>
using namespace std;
double power(double x, long long n) {
  if (n == 0)
    return 1;
  else if (n % 2 == 0)
    return power((x * x), n / 2);
  else
    return (x * power((x * x), (n - 1) / 2));
}
long long C(long long n, long long r) {
  if (r > n - r) r = n - r;
  long long ans = 1;
  int i;
  for (i = 1; i <= r; i++) {
    ans = ((ans) * (n - r + i));
    ans = (ans) / i;
  }
  return ans;
}
long long modularExponentiation(long long x, long long n, long long M) {
  if (n == 0)
    return 1;
  else if (n % 2 == 0)
    return modularExponentiation((x * x) % M, n / 2, M);
  else
    return (x % M * modularExponentiation((x * x) % M, (n - 1) / 2, M) % M) % M;
}
long long modInverse(long long A, long long M) {
  return modularExponentiation(A, M - 2, M);
}
void solve() {
  long long w, h, n, temp1, temp2, temp, i;
  char c;
  string str1;
  string str2;
  cin >> w >> h >> n;
  set<long long> s1;
  set<long long> s2;
  s1.insert(0);
  s1.insert(w);
  s2.insert(0);
  s2.insert(h);
  multiset<long long, greater<long long>> m1;
  multiset<long long, greater<long long>> m2;
  m1.insert(w);
  m2.insert(h);
  for (i = 0; i < n; i++) {
    cin >> c >> temp;
    if (c == 'H') {
      auto it = s2.lower_bound(temp);
      temp2 = *it;
      it--;
      temp1 = *it;
      s2.insert(temp);
      m2.insert(temp - temp1);
      m2.insert(temp2 - temp);
      m2.erase(m2.find(temp2 - temp1));
    } else if (c == 'V') {
      auto it = s1.lower_bound(temp);
      temp2 = *it;
      it--;
      temp1 = *it;
      s1.insert(temp);
      m1.insert(temp - temp1);
      m1.insert(temp2 - temp);
      m1.erase(m1.find(temp2 - temp1));
    }
    auto it1 = m1.begin();
    auto it2 = m2.begin();
    temp1 = *it1;
    temp2 = *it2;
    cout << (temp1) * (temp2) << endl;
  }
}
int main() {
  solve();
  return 0;
}
