#include using namespace std; typedef long long LL; typedef long double LD; typedef pair < int, int > PII; typedef pair < LL, LL > PLL; #define all(x) (x).begin(), (x).end() #define sz(x) (int)(x).size() const int N = 1e5 + 7; const int S = 2 * 9 + 1; const int M = 1e9 + 7; int n, k, m; int val[N][2]; int dp[N][S][S]; int ways[S], col[N][S]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); for(int i = 0; i < 10; i++) for(int j = 0; j < 10; j++) ways[i + j]++; cin >> n >> k >> m; for(int i = 1; i <= n; i++) val[i][0] = val[i][1] = -1; while(m--) { int y, x; cin >> x >> y; x++; cin >> val[x][y]; } for(int i = 1; i <= n; i++) { if(val[i][0] != -1 && val[i][1] != -1) col[i][val[i][0] + val[i][1]] = 1; else if(val[i][0] != -1) { for(int j = 0; j < 10; j++) col[i][val[i][0] + j]++; } else if(val[i][1] != -1) { for(int j = 0; j < 10; j++) col[i][val[i][1] + j]++; } else { for(int j = 0; j < S; j++) col[i][j] = ways[j]; } //for(int j = 0; j < S; j++) // cerr << i << " " << j << " " << col[i][j] << "\n"; } for(int j = 0; j < S; j++) { for(int l = 0; l + j <= k && l < S; l++) { dp[2][j][l] = col[1][j] * col[2][l] % M; //cerr << 2 << " " << j << " " << l << " -> " << dp[2][j][l] << "\n"; } } LL ans = 0; for(int i = 2; i <= n; i++) { for(int j = 0; j < S; j++) { for(int l = 0; l < S && l + j <= k; l++) { if(i < n) { int r = k - j - l; dp[i + 1][l][r] = (dp[i + 1][l][r] + (LL)dp[i][j][l] * col[i + 1][r]) % M; } else { ans = (ans + dp[i][j][l]) % M; } //cerr << i << " " << j << " " << l << " -> " << dp[i][j][l] << "\n"; } } } cout << ans << "\n"; return 0; }