#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
const long long N=200001;
long long x,w,h,n,a[N],b[N];
char c;
long long lt[N<<2][2];
long long rt[N<<2][2];
long long l[N<<2][2];
long long r[N<<2][2];
long long ma[N<<2][2];
bool pure[N<<2][2];
void pushup(long long root,long long k){
if(pure[root<<1][k]&&pure[root<<1|1][k]) {
pure[root][k]=1;
}else{
pure[root][k]=0;
}
long long s=max(ma[root<<1][k],ma[root<<1|1][k]);
long long ans=max(r[root<<1][k]+l[root<<1|1][k],s);
ma[root][k]=ans;
if(pure[root<<1][k]){
l[root][k]=l[root<<1][k]+l[root<<1|1][k];
}else{
l[root][k]=l[root<<1][k];
}
if(pure[root<<1|1][k]){
r[root][k]=r[root<<1|1][k]+r[root<<1][k];
}else{
r[root][k]=r[root<<1|1][k];
}
}
inline void build(long long root,long long ll,long long rr,long long k)
{
lt[root][k]=ll;
rt[root][k]=rr;
if (ll==rr)
{
pure[root][k]=true;
ma[root][k]=1;
l[root][k]=1;
r[root][k]=1;
return;
}
long long mid=(ll+rr)>>1;
build(root<<1,ll,mid,k);
build(root<<1|1,mid+1,rr,k);
pushup(root,k);
}
inline void update(long long root,long long x,long long k)
{
if (lt[root][k]==x && rt[root][k]==x)
{
pure[root][k]=false;
ma[root][k]=0;
l[root][k]=0;
r[root][k]=0;
return;
}
long long mid=(lt[root][k]+rt[root][k])>>1;
if (x<=mid){
update(root<<1,x,k);
}
else{
update(root<<1|1,x,k);
}
pushup(root,k);
}
int main()
{
scanf("%lld%lld%lld",&w,&h,&n);
build(1,1,w-1,1);
build(1,1,h-1,0);
for (long long i=1;i<=n;i++)
{
c=getchar();
while (c!='H' && c!='V'){
c=getchar();
}
if (c=='V')
{
scanf("%lld",&x);
update(1,x,1);
}
else
{
scanf("%lld",&x);
update(1,x,0);
}
printf("%lld\n",(ma[1][1]+1)*(ma[1][0]+1));
}
return 0;
}