class CP: def __init__(self, N): self.fact = [1]*(N+1) self.fact_inv = [1]*(N+1) for i in range(2, N+1): self.fact[i] = self.fact[i-1]*i%MOD self.fact_inv[N] = pow(self.fact[N], -1, MOD) for i in reversed(range(1, N)): self.fact_inv[i] = self.fact_inv[i+1]*(i+1)%MOD def C(self, N, K): if N < 0 or K < 0 or N < K: return 0 return self.fact[N]*self.fact_inv[K]%MOD*self.fact_inv[N-K]%MOD def P(self, N, K): if N < 0 or K < 0 or N < K: return 0 return self.fact[N]*self.fact_inv[N-K]%MOD def H(self, N, K): if N < 0 or K < 0: return 0 if N == K == 0: return 1 return self.C(N+K-1, K) MOD = 998244353 cp = CP(10**7*2) N, M, K, L = map(int, input().split()) ans = cp.H(N, K*M) for i in range(1, N+1): if K*M < (M+1)*i: break if i%2 == 1: ans -= cp.C(N, i)*cp.H(N, K*M-(M+1)*i)%MOD ans %= MOD else: ans += cp.C(N, i)*cp.H(N, K*M-(M+1)*i)%MOD ans %= MOD for i in range(L): cnt = K*M-i SUM = cp.H(N-1, cnt) for j in range(1, N): if cnt < (M+1)*j: break if j%2 == 1: SUM -= cp.C(N-1, j)*cp.H(N-1, cnt-(M+1)*j)%MOD SUM %= MOD else: SUM += cp.C(N-1, j)*cp.H(N-1, cnt-(M+1)*j)%MOD SUM %= MOD ans -= SUM ans %= MOD for i in range(L, M+1): cnt = K*M-i SUM = cp.H(N-1, cnt) for j in range(1, N): if cnt < (i+1)*j: break if j%2 == 1: SUM -= cp.C(N-1, j)*cp.H(N-1, cnt-(i+1)*j)%MOD SUM %= MOD else: SUM += cp.C(N-1, j)*cp.H(N-1, cnt-(i+1)*j)%MOD SUM %= MOD ans -= SUM ans %= MOD print(ans)