#include <bits/stdc++.h>
using namespace std;
struct Node {
  int lsum;
  int rsum;
  int sum;
};
int n1, n2, m;
Node height[200006 << 2], weight[200006 << 2];
void build(Node tree[], int pos, int l, int r) {
  tree[pos].lsum = tree[pos].rsum = tree[pos].sum = r - l + 1;
  if (l == r) return;
  int mid = (l + r) >> 1;
  build(tree, pos << 1, l, mid);
  build(tree, pos << 1 | 1, mid + 1, r);
}
void push(Node tree[], int pos, int l, int r) {
  int mid = (l + r) >> 1;
  tree[pos].sum = max(tree[pos << 1].sum, tree[pos << 1 | 1].sum);
  tree[pos].sum =
      max(tree[pos].sum, tree[pos << 1].rsum + tree[pos << 1 | 1].lsum);
  tree[pos].lsum = tree[pos << 1].lsum;
  if (tree[pos << 1].sum == mid - l + 1)
    tree[pos].lsum += tree[pos << 1 | 1].lsum;
  tree[pos].rsum = tree[pos << 1 | 1].rsum;
  if (tree[pos << 1 | 1].sum == r - mid) tree[pos].rsum += tree[pos << 1].rsum;
}
void change(Node tree[], int pos, int l, int r, int x) {
  if (l == r) {
    tree[pos].lsum = tree[pos].rsum = tree[pos].sum = 0;
    return;
  }
  int mid = (l + r) >> 1;
  if (x <= mid)
    change(tree, pos << 1, l, mid, x);
  else
    change(tree, pos << 1 | 1, mid + 1, r, x);
  push(tree, pos, l, r);
}
int main() {
  scanf("%d %d %d", &n1, &n2, &m);
  build(height, 1, 1, n1 - 1);
  build(weight, 1, 1, n2 - 1);
  while (m--) {
    char option[2];
    int x;
    scanf("%s %d", option, &x);
    if (option[0] == 'V')
      change(height, 1, 1, n1 - 1, x);
    else
      change(weight, 1, 1, n2 - 1, x);
    printf("%lld\n", (long long)(height[1].sum + 1) * (weight[1].sum + 1));
  }
  return 0;
}
