#include <bits/stdc++.h>
using namespace std;
long long int disjoint_set_horizontal[200005], disjoint_set_vertical[200005],
    rank_horizontal[200005], rank_vertical[200005];
long long int horizontal[200005], vertical[200005];
pair<char, long long int> input[200005];
long long int ans[200005];
long long int max_horizontal = 0, max_vertical = 0;
void create_set(long long int disjoint_set[], long long int n) {
  for (long long int i = 1; i <= n; i++) {
    disjoint_set[i] = i;
  }
}
long long int find_parent(long long int disjoint_set[], long long int index) {
  long long int temp = index;
  while (disjoint_set[index] != index) {
    disjoint_set[index] = disjoint_set[disjoint_set[index]];
    index = disjoint_set[index];
  }
  disjoint_set[temp] = index;
  return index;
}
long long int merge_sets(long long int disjoint_set[], long long int rank[],
                         long long int i, long long int j, long long int flag) {
  long long int parent1 = find_parent(disjoint_set, i);
  long long int parent2 = find_parent(disjoint_set, j);
  if (parent1 != parent2) {
    if (rank[parent1] > rank[parent2]) {
      rank[parent1] += rank[parent2];
      rank[parent2] = 0;
      if (flag) {
        if (rank[parent1] > max_horizontal) max_horizontal = rank[parent1];
      } else {
        if (rank[parent1] > max_vertical) max_vertical = rank[parent1];
      }
      disjoint_set[parent2] = parent1;
    } else {
      rank[parent2] += rank[parent1];
      rank[parent1] = 0;
      if (flag) {
        if (rank[parent2] > max_horizontal) max_horizontal = rank[parent2];
      } else {
        if (rank[parent2] > max_vertical) max_vertical = rank[parent2];
      }
      disjoint_set[parent1] = parent2;
    }
  }
}
int main() {
  long long int w, h, n;
  cin >> w >> h >> n;
  for (long long int i = 0; i < n; i++) {
    cin >> input[i].first >> input[i].second;
    if (input[i].first == 'H')
      horizontal[input[i].second] = 1;
    else
      vertical[input[i].second] = 1;
  }
  create_set(disjoint_set_horizontal, h);
  create_set(disjoint_set_vertical, w);
  long long int current = 1, cur_length = 1;
  disjoint_set_horizontal[1] = current;
  for (long long int i = 2; i <= h; i++) {
    if (horizontal[i - 1]) {
      rank_horizontal[current] = cur_length;
      if (cur_length > max_horizontal) max_horizontal = cur_length;
      cur_length = 0;
      current = i;
    }
    cur_length++;
    disjoint_set_horizontal[i] = current;
    rank_horizontal[i] = 0;
  }
  rank_horizontal[current] = cur_length;
  if (cur_length > max_horizontal) max_horizontal = cur_length;
  current = 1, cur_length = 1;
  disjoint_set_vertical[1] = current;
  for (long long int i = 2; i <= w; i++) {
    if (vertical[i - 1]) {
      rank_vertical[current] = cur_length;
      if (cur_length > max_vertical) max_vertical = cur_length;
      cur_length = 0;
      current = i;
    }
    cur_length++;
    disjoint_set_vertical[i] = current;
    rank_vertical[i] = 0;
  }
  rank_vertical[current] = cur_length;
  if (cur_length > max_vertical) max_vertical = cur_length;
  ans[n - 1] = max_horizontal * max_vertical;
  for (long long int i = n - 1; i > 0; i--) {
    if (input[i].first == 'H')
      merge_sets(disjoint_set_horizontal, rank_horizontal, input[i].second,
                 input[i].second + 1, 1);
    else
      merge_sets(disjoint_set_vertical, rank_vertical, input[i].second,
                 input[i].second + 1, 0);
    ans[i - 1] = max_vertical * max_horizontal;
  }
  for (long long int i = 0; i < n; i++) cout << ans[i] << endl;
  return 0;
}
