#include #include const int MOD = 998244353; int H, W, K; int h, w, n, d; int f[400010], invf[400010]; int ans; int mod_pow(int a, int e) { int r = 1; while (e) { if (e & 1) r = 1LL * r * a % MOD; a = 1LL * a * a % MOD; e >>= 1; } return r; } #define C(n, k) ((k) < 0 || (k) > (n) ? 0 : 1LL * f[n] * invf[k] % MOD * invf[(n) - (k)] % MOD) int main() { scanf("%d %d %d", &H, &W, &K); h = H - 1; w = W - 1; n = h + w; d = K / 2; f[0] = invf[0] = 1; for (int i = 1; i <= n; ++i) f[i] = 1LL * f[i-1] * i % MOD; invf[n] = mod_pow(f[n], MOD - 2); for (int i = n; i >= 1; --i) invf[i-1] = 1LL * invf[i] * i % MOD; if (d == 0) { printf("%d\n", C(n, h)); return 0; } int M = (h < w) ? h : w; int period = 2 * d + 2; ans = 0; for (int m = 0; m <= M; ++m) { int sum1 = 1LL * C(n, 2*m) * C(n - 2*m, h - m) % MOD; int n2 = 2 * m; long long bridge = 0; int kmin = - (n2 + period) / period - 2; int kmax = (n2 + period) / period + 2; for (int k = kmin; k <= kmax; ++k) { int t1 = m + k * period; int t2 = m + d + 1 + k * period; long long val1 = (t1 < 0 || t1 > n2) ? 0 : 1LL * f[n2] * invf[t1] % MOD * invf[n2 - t1] % MOD; long long val2 = (t2 < 0 || t2 > n2) ? 0 : 1LL * f[n2] * invf[t2] % MOD * invf[n2 - t2] % MOD; bridge += val1 - val2; } bridge %= MOD; if (bridge < 0) bridge += MOD; ans = (ans + sum1 * bridge) % MOD; } printf("%d\n", ans); return 0; }