#include using namespace std; using ll=long long; using ld=double; #define FOR(i,a,b) for(ll i=a;i<(ll)b;++i) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define aa first #define bb second #define PB push_back #define EQ(a,b) (fabs(a-b)<=(fabs(a+b)*EPS)) #define MOD ((ll)1e9+7) #define MX 100007 #define SM 19 int dp[MX][SM]; int in[MX][2]; map cnt; inline ll d(int n) { return n >= MOD ? n%MOD : n; } int main(){ ios::sync_with_stdio(0);cout.tie(0);cin.tie(0); ll n, K, m; cin >> n >> K >> m; F(10)FF(10)cnt[i+j] ++; F(MX)FF(2)in[i][j] = -1; F(m) { ll c, r, v; cin >> c >> r >> v; in[c][r] = v; } F(MX) { if (in[i][1] != -1) swap(in[i][0], in[i][1]); } F(n) { FF(SM) { ll res = 1; if (in[i][0] == -1) { res = cnt[j]; } else if (in[i][1] == -1) { if (j - in[i][0] <= 9 && j - in[i][0] >= 0) res = 1; else res = 0; } else if (in[i][0] != -1) { if (j == in[i][1] + in[i][0]) res = 1; else res = 0; } ll totSum = 0; if (i >= 2) { FOR(k,0,SM) { ll curSum = 0; if (in[i-1][0] == -1) { if (cnt.find(K - j - k) != cnt.end()) curSum = cnt[K - j - k]; //cout << K << ',' << j << ',' << k << ',' << cnt[K - j - k] << endl; curSum = d(curSum); } else if (in[i-1][1] == -1) { if (K - j - k - in[i-1][0] >= 0 && K - j - k - in[i-1][0] <= 9) curSum = 1; else curSum = 0; } else { if (K - j - k - in[i-1][0] - in[i-1][1] != 0) curSum = 0; } curSum *= dp[i-2][k]; curSum = d(curSum); totSum += curSum; totSum = d(totSum); } //cout << j << ": " << totSum << endl; res *= totSum; res = d(res); } dp[i][j] = res; } } ll rr = 0; if (in[n-1][0] == -1) F(SM) rr = d(rr + dp[n-1][i]); else if (in[n-1][1] == -1) { F(10) rr = d(rr + dp[n-1][ in[n-1][0] + i]); } else rr = dp[n-1][in[n-1][0] + in[n-1][1]]; //FF(n) cout << dp[j][0] << ' '; //cout << endl; cout << rr << endl; return 0; }