#include #include #include using mint = atcoder::modint998244353; int main() { int M, N, k, l; std::cin >> M >> N >> k >> l; M--; mint inv = mint(6).inv(); std::vector Q(N + 1, 0); Q[0] = 1; Q[1] = -(k - 1) * inv; Q[2] = -(l - k) * inv; Q[N] = -(7 - l) * inv; std::vector init(N); init[N - 1] = 1; std::vector P = atcoder::convolution(Q, init); P.resize(N); M += N - 1; while (M) { std::vector Q2 = Q; for (int i = 1; i <= N; i += 2) { Q2[i] = -Q2[i]; } P = atcoder::convolution(P, Q2); Q = atcoder::convolution(Q, Q2); std::vector S(N), T(N + 1); for (int i = 0; i < N; i++) S[i] = P[i * 2 + (M & 1)]; for (int i = 0; i <= N; i++) T[i] = Q[i * 2]; P = S; Q = T; M >>= 1; } std::cout << P[0].val() << std::endl; }