import sys def solve(): N, M, K, L = map(int, input().split()) MOD = 998244353 MAX = N + M * K + 10 fact = [1] * (MAX + 1) factinv = [1] * (MAX + 1) inv = [1] * (MAX + 1) for p in range(1, MAX + 1): fact[p] = (fact[p - 1] * p) % MOD if p > 1: inv[p] = (-(MOD // p) * inv[MOD % p]) % MOD factinv[p] = (factinv[p - 1] * inv[p]) % MOD def combination(n, r): if r < 0 or n < 0 or r > n: return 0 return (fact[n] * ((factinv[r] * factinv[n - r]) % MOD)) % MOD ans = 0 m = [0] * N for i in range(0, N): m[i] = combination(N - 1, i) for x in range(L, M + 1): min1 = 1 c = N - 2 + M * K - x for i in range(0, N): val = (m[i] * ((combination(c - (M + 1) * i, N - 2) - combination(c - (x + 1) * i, N - 2)) % MOD)) % MOD ans = (ans + val * min1) % MOD min1 *= -1 print(ans % MOD) if __name__ == "__main__": solve()