#include using namespace std; #define MOD 1000000007 #define ll long long ll powmod(ll base, ll exp) { base %= MOD; ll result = 1; while (exp > 0) { if(exp&1) result = (result*base)%MOD; base = (base*base)%MOD; exp>>=1; } return result; } int main() { ll N, K, M; scanf("%lli %lli %lli", &N, &K, &M); ll grid[N][2]; for(ll i = 0; i < N; i++) { grid[i][0] = -1; grid[i][1] = -1; } for(ll i = 0; i < M; i++) { ll C, R, V; scanf("%lli %lli %lli", &C, &R, &V); grid[C][R] = V; } ll mx[3] = {18, 18, 18}, mn[3] = {0,0,0}, volno[3]={0,0,0}; for(ll m = 0; m < 3; m++) { for(ll i = m; i < N; i += 3) { if(grid[i][0] > -1 && grid[i][1] > -1) { ll sum = grid[i][0] + grid[i][1]; if(sum > mx[m] || sum < mn[m]) { printf("0\n"); return 0; } mx[m] = mn[m] = sum; continue; } if(grid[i][0] > -1 && grid[i][1] == -1) { mx[m] = min(mx[m], grid[i][0] + 9); mn[m] = max(mn[m], grid[i][0]); continue; } if(grid[i][0] == -1 && grid[i][1] > -1) { mx[m] = min(mx[m], grid[i][1] + 9); mn[m] = max(mn[m], grid[i][1]); continue; } volno[m]++; } } ll k[3] = {}; ll s = 0; for(k[0] = mn[0]; k[0] <= mx[0]; k[0]++) { for(k[1] = mn[1]; k[1] <= mx[1]; k[1]++) { k[2] = K - k[0] - k[1]; if(k[2] > mx[2] || k[2] < mn[2]) continue; ll ss = 1; for(ll m = 0; m < 3; m++) { if(k[m] > 9) ss = (ss*powmod(19-k[m], volno[m]))%MOD; else ss = (ss*powmod(1+k[m], volno[m]))%MOD; } s = (s+ss)%MOD; } } printf("%lli\n", s); }