#include <bits/stdc++.h>
using namespace std;
const bool testcases = false;
int64_t seed;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
inline int64_t rnd(int64_t l = 0, int64_t r = INT_MAX) {
  return uniform_int_distribution<int64_t>(l, r)(rng);
}
inline bool in_range(int64_t a, int64_t l, int64_t r) {
  return (a >= l && a <= r);
}
template <typename H, typename... T>
void inp(H &head) {
  cin >> head;
}
template <typename H, typename... T>
void inp(H &head, T &...tail) {
  cin >> head;
  inp(tail...);
}
template <typename T>
bool isPrime(T n) {
  for (T i = 2; i * i <= n; i++)
    if (n % i == 0) return false;
  return n >= 2;
}
template <typename T>
inline istream &operator>>(istream &in, vector<T> &a) {
  for (T &x : a) in >> x;
  return in;
}
template <typename T, typename U>
inline istream &operator>>(istream &in, pair<T, U> &a) {
  in >> a.first >> a.second;
  return in;
}
void solve();
void fast_io();
int32_t main(int32_t argc, char **argv) {
  fast_io();
  int64_t TC = 1;
  if (testcases) cin >> TC;
  for (int64_t tc = 1; tc <= TC; tc++) solve(), 108;
  return 0;
}
set<int64_t> hc, vc;
multiset<int64_t> hl, vl;
void solve() {
  char cut;
  int64_t w, h, n, l, r, x, mxw, mxh;
  cin >> w >> h >> n;
  hc.insert({0, h});
  vc.insert({0, w});
  hl.insert(h);
  vl.insert(w);
  for (int64_t i = 0; i < n; i++) {
    cin >> cut >> x;
    if (cut == 'H') {
      auto it = hc.lower_bound(x);
      r = *it;
      it--;
      l = *it;
      hc.insert(x);
      hl.erase(hl.find(r - l));
      hl.insert({r - x, x - l});
    } else {
      auto it = vc.lower_bound(x);
      r = *it;
      it--;
      l = *it;
      vc.insert(x);
      vl.erase(vl.find(r - l));
      vl.insert({r - x, x - l});
    }
    mxw = *vl.rbegin();
    mxh = *hl.rbegin();
    cout << mxw * mxh << '\n';
  }
}
void fast_io() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
}
