#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll mod=1e9l+7;
int main(){
cin.tie(0)->sync_with_stdio(0);
auto pow=[](ll b, ll e){
ll r=1;
while(e){
if(e&1)r=r*b%mod;
b=b*b%mod;
e/=2;
}
return r;
};
int n,m,k;cin>>n>>m>>k;
int v1=1,v2=1;
vector<pair<int,int>> xs,ys;
for(int i=0;i<k;i++){
char c;
int x,y;
cin>>c>>y>>x;
x--,y--,c=c=='+';
v1&=(x+y)%2!=c;
v2&=(x+y)%2==c;
xs.push_back({x,(c+y)&1});
ys.push_back({y,(c+x)&1});
}
sort(begin(xs),end(xs));
sort(begin(ys),end(ys));
int fx=ssize(xs)>0,fy=ssize(ys)>0;
for(int i=0;i<ssize(xs)-1;i++)fx+=xs[i].first!=xs[i+1].first;
for(int i=0;i<ssize(ys)-1;i++)fy+=ys[i].first!=ys[i+1].first;
for(int i=0;i<ssize(xs)-1;i++)if(xs[i].first==xs[i+1].first&&xs[i].second!=xs[i+1].second)fx=-1;
for(int i=0;i<ssize(ys)-1;i++)if(ys[i].first==ys[i+1].first&&ys[i].second!=ys[i+1].second)fy=-1;
fx=m-fx;
fy=n-fy;
ll ans=0;
if(fx<=m)ans=(ans+pow(2,fx))%mod;
if(fy<=n)ans=(ans+pow(2,fy))%mod;
ans=(ans+mod-v1-v2)%mod;
cout<<ans<<'\n';
}