constint N = 1e2 + 50; constint MOD = 1e9 + 7; int n, m, k; int st[N][N * 80]; intgetid(int sum, int mul, int cur) { return sum * k * k + mul * k + cur; } voidsolve() {
cin >> n >> m >> k; vector<vector<char>> a(n + 5, vector<char>(m + 5));
for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) cin >> a[i][j]; int tot = k * k * k; for (int sum = 0; sum < k; ++sum) { for (int mul = 0; mul < k; ++mul) { for (int cur = 0; cur < k; ++cur) { for (char num = '0'; num <= '9'; ++num) { st[num][getid(sum, mul, cur)] = getid(sum, mul, (cur * 10 + num - '0') % k); } st['+'][getid(sum, mul, cur)] = getid((sum + mul * cur) % k, 1, 0); st['-'][getid(sum, mul, cur)] = getid((sum + mul * cur) % k, k - 1, 0); st['*'][getid(sum, mul, cur)] = getid(sum, (cur * mul) % k, 0); } } }
dp[1][1][getid(0, 1, (a[1][1] - '0') % k)] = 1; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { for (int sta = 0; sta < tot; ++sta) { if (isdigit(a[i][j]) || isdigit(a[i][j - 1])) dp[i][j][st[a[i][j]][sta]] = (1ll * dp[i][j][st[a[i][j]][sta]] + dp[i][j - 1][sta]) % MOD; if (isdigit(a[i][j]) || isdigit(a[i - 1][j])) dp[i][j][st[a[i][j]][sta]] = (1ll * dp[i][j][st[a[i][j]][sta]] + dp[i - 1][j][sta]) % MOD; } } }
int ans = 0; for (int sum = 0; sum < k; ++sum) { for (int mul = 0; mul < k; ++mul) { for (int cur = 0; cur < k; ++cur) { if ((sum + mul * cur) % k == 0) ans += dp[n][m][getid(sum, mul, cur)]; ans %= MOD; } } } cout << ans << endl; }