#include<bits/stdc++.h>
using namespace std;
using ll = long long;

#define D if(0)

const int NMAX = 1123456;
const int NUM = 10;
const int MOD = 1000000007;

ll dpx[2*NUM][2*NUM];
ll dpy[2*NUM][2*NUM];
int podm[NMAX][2];
int n,k,m;
ll soucty[2*NUM];

int main()
{
	scanf("%d%d%d",&n,&k,&m);
	for(int i=0;i<n;i++)
		podm[i][0]=podm[i][1]=-1;
	for(int i=0;i<m;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		podm[x][y]=z;
	}
	auto dpa = dpx;
	auto dpb = dpy;
	for(int i1=0;i1<NUM;i1++)
	for(int i2=0;i2<NUM;i2++)
	for(int i3=0;i3<NUM;i3++)
	for(int i4=0;i4<NUM;i4++)
	{
		if(podm[0][0]==-1 || podm[0][0]==i1)
		if(podm[0][1]==-1 || podm[0][1]==i2)
		if(podm[1][0]==-1 || podm[1][0]==i3)
		if(podm[1][1]==-1 || podm[1][1]==i4)
			dpa[i1+i2][i3+i4] ++;
	}
	for(int i=2;i<n;i++)
	{
		for(int j=0;j<2*NUM;j++) soucty[j]=0;
		for(int i1=0;i1<NUM;i1++)
		for(int i2=0;i2<NUM;i2++)
		{
			if(podm[i][0]==-1 || podm[i][0]==i1)
			if(podm[i][1]==-1 || podm[i][1]==i2)
				soucty[i1+i2]++;
		}
		for(int i1=0;i1<2*NUM;i1++)
		for(int i2=0;i2<2*NUM;i2++)
			dpb[i1][i2]=0;
		for(int i1=0;i1<2*NUM;i1++)
		for(int i2=0;i2<2*NUM;i2++)
		{
			int i3 = k-i1-i2;
			if(i3<0||i3>=2*NUM) continue;
			dpb[i2][i3] = (dpb[i2][i3] + dpa[i1][i2]*soucty[i3]) % MOD;
		}
		auto tmp=dpa;dpa=dpb;dpb=tmp;
	}
	ll out=0;
		for(int i1=0;i1<2*NUM;i1++)
		for(int i2=0;i2<2*NUM;i2++)
			out = (out+dpa[i1][i2]) % MOD;
	printf("%lld\n",out);
	return 0;
}

