############################################################# import sys sys.setrecursionlimit(10**7) from heapq import heappop,heappush from collections import deque,defaultdict,Counter from bisect import bisect_left, bisect_right from itertools import product,combinations,permutations ipt = sys.stdin.readline def iin(): return int(ipt()) def lmin(): return list(map(int,ipt().split())) MOD = 998244353 U=5*10**5 fact=[1]*(U+1) invfact=[1]*(U+1) for i in range(1,U+1):fact[i]=fact[i-1]*i%MOD invfact[U]=pow(fact[U],MOD-2,MOD) for i in range(U-1,-1,-1):invfact[i]=invfact[i+1]*(i+1)%MOD def nCr(n,r): if n<0 or r<0 or n-r<0:return 0 return fact[n]*invfact[r]%MOD*invfact[n-r]%MOD def nPr(n,r): if n<0 or r<0 or n-r<0:return 0 return fact[n]*invfact[n-r]%MOD ############################################################# N,M = lmin() B = lmin() """ for i in range(1,N-1): if B[i] > B[i-1] and B[i] > B[i+1]: print(0) exit() """ ans = 0 for i in range(min(B[3]+1,B[1]+1)): tmp = 1 tmp *= nCr(B[3],i) tmp %= MOD tmp *= nCr(M-B[3],B[1]-i) tmp %= MOD tmp *= nCr(M-B[3]+i-B[1]+i,B[0]-B[1]+i) tmp %= MOD tmp *= nCr(M-i-(M-B[3]-(B[1]-i)),B[2]-i) tmp %= MOD ans += tmp ans %= MOD print(ans*nCr(M,B[3])%MOD)