#include <bits/stdc++.h>
using namespace std;
#define mod 998244353
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3fll
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
const int maxn=(1<<20)+10;
ll dp[maxn];
int mst[22],val[22];
int n,m,k;
inline void add(ll &a,ll b)
{
	a+=b;
	if(a>=MOD)a-=MOD;
}
int trans[maxn][22];
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	n--;
	for(int i=0;i<k;i++)
	{
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		a--,b--;
		mst[a]|=(1<<b);
		val[a]|=(c<<b);
	}
	
	for(int msk=0;msk<(1<<n);msk++)
	{
		int nxtone=0;
		for(int i=0;i<n;i++)
		{
			if(msk>>i&1)continue;
			if(nxtone<=i)nxtone=i+1;
			while(nxtone<n&&!(msk>>nxtone&1))nxtone++;
			trans[msk][i]=msk^(1<<i);
			if(nxtone<n)trans[msk][i]^=(1<<nxtone);
		}
	}
	
	dp[0]=1;
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			for(int msk=0;msk<(1<<n);msk++)
			{
				if(msk>>j&1)continue;
			//	cout<<msk<<" "<<j<<" "<<trans[msk][j]<<endl;
				add(dp[trans[msk][j]],dp[msk]);
			}
		}
		for(int msk=0;msk<(1<<n);msk++)
		{
			if((msk&mst[i])!=val[i])
			{
				dp[msk]=0;
			}
		}
	}
	ll ans=0;
	for(int msk=0;msk<(1<<n);msk++)
	{
		add(ans,dp[msk]);
	}
	printf("%lld\n",ans);
	return 0;
}