#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using pll = pair<ll, ll>;
using vpll = vector<pll>;
template <typename T>
T gcd(T a, T b) {
  return b == 0 ? a : gcd(b, a % b);
}
template <typename T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
static bool constexpr dbg = 0;
ll constexpr NM = 1;
ll n, w, h;
int main() {
  if (!dbg) {
    std::ios::sync_with_stdio(false);
  }
  cin >> w >> h >> n;
  set<pll> mph, mpv;
  mpv.insert({w, 0});
  mph.insert({h, 0});
  multiset<ll> msh, msv;
  msh.insert(h);
  msv.insert(w);
  for (ll _ = 1; _ <= (ll)(n); ++_) {
    char ty;
    ll val;
    cin >> ty >> val;
    if (ty == 'H') {
      auto iter = mph.upper_bound({val, 0});
      auto cur = *iter;
      mph.erase(iter);
      mph.insert({val, cur.second});
      mph.insert({cur.first, val});
      msh.erase(msh.find(cur.first - cur.second));
      msh.insert(cur.first - val);
      msh.insert(val - cur.second);
    } else {
      auto iter = mpv.upper_bound({val, 0});
      auto cur = *iter;
      mpv.erase(iter);
      mpv.insert({val, cur.second});
      mpv.insert({cur.first, val});
      msv.erase(msv.find(cur.first - cur.second));
      msv.insert(cur.first - val);
      msv.insert(val - cur.second);
    }
    cout << (*msh.rbegin() * *msv.rbegin()) << '\n';
  }
  return 0;
}
