#include <bits/stdc++.h>
using namespace std;
const int INF = (int)2e9;
const long long INFL = (long long)9e18;
const int MAXINT = ((~0) ^ (1 << 31));
const long long MAXLL = ((~0) ^ ((long long)1 << 63));
template <class T>
inline T pow2(T a) {
  return a * a;
}
template <class T>
inline bool mineq(T& a, T b) {
  return (a > b) ? (a = b, true) : false;
}
template <class T>
inline bool maxeq(T& a, T b) {
  return (a < b) ? (a = b, true) : false;
}
set<pair<int, int> > v, h;
set<pair<int, int> >::iterator it;
struct cmp {
  bool operator()(const pair<int, int>& a, const pair<int, int>& b) const {
    if (a.second - a.first != b.second - b.first)
      return (a.second - a.first > b.second - b.first);
    return a.first < b.first;
  }
};
set<pair<int, int>, cmp> gv, gh;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, m, q;
  cin >> m >> n >> q;
  h.insert(make_pair(0, m));
  gh.insert(make_pair(0, m));
  v.insert(make_pair(0, n));
  gv.insert(make_pair(0, n));
  while (q--) {
    char c;
    int p;
    cin >> c >> p;
    if (c == 'V') {
      it = h.upper_bound(make_pair(p, -INF));
      it--;
      pair<int, int> a = make_pair(it->first, p);
      pair<int, int> b = make_pair(p, it->second);
      gh.erase(*it);
      h.erase(it);
      h.insert(a);
      h.insert(b);
      gh.insert(a);
      gh.insert(b);
    } else {
      it = v.upper_bound(make_pair(p, -INF));
      it--;
      pair<int, int> a = make_pair(it->first, p);
      pair<int, int> b = make_pair(p, it->second);
      gv.erase(*it);
      v.erase(it);
      v.insert(a);
      v.insert(b);
      gv.insert(a);
      gv.insert(b);
    }
    cout << (long long)(gh.begin()->second - gh.begin()->first) *
                (long long)(gv.begin()->second - gv.begin()->first)
         << "\n";
  }
}
