#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+5;
struct node{
	ll x,y,z;
};// x记录行/列, y记录第几行/第几列, z记录开灯/关灯
node a[N];
ll f1[N],f2[N];  //f1用来标记行有没有被操作过,f2用来标记列
int main()
{
    ll n,m,q,sum,i;
    cin>>n>>m>>q;
    string s1,s2;
    ll ans=0;
    for(i=1;i<=q;i++)                      //因为要倒着模拟,所以先存下来
    {
        ll p;
        cin>>s1>>p>>s2;
        if(s1!="row") a[i].x=1;        //a[i].x为0表示是行操作,为1表示为列操作。 
		a[i].y=p;            //a[i].y存第几行或者第几列。 
        if(s2=="on") a[i].z=1;    //a[i].z为1表示是开,为0表示关。  
    }
    for(i=q;i>=1;i--)
    {
    	if(a[i].x==0) 
    	{
    		if(f1[a[i].y]) continue;   //被标记就跳过
            f1[a[i].y]=1; //防止重复加 
    		if(a[i].z)
    		{
    			ans+=m;   
            }
            n--;          //可开关行减一 (前面的操作会被后面覆盖,所有后面操作过了就不用管前面怎么变了)
		}
		else 
		{
			if(f2[a[i].y]) continue;
            f2[a[i].y]=1;
			if(a[i].z)
			{
				ans+=n;
            }
            m--;         //可开关列减一 
		}
	}
	cout<<ans;
	return 0;
}