def powmod(n,pow,mod): val = 1 while pow > 0: if pow & 1: val = (val * n) % mod pow = pow >> 1 n = (n * n) % mod return val n, m, x, y = map(int, input().split()) if (n < x) | (n < y): print(0) exit() p = 10 ** 9 + 7 kaijo = [1 for i in range(n+m//2+2)] invkaijo = [1 for i in range(n+m//2+2)] for i in range(1,n+m//2+2): kaijo[i] = kaijo[i-1] * i % p invkaijo[i] = powmod(kaijo[i],p-2,p) pmnum = [m // 4 for i in range(4)] for i in range(m%4+1): pmnum[i] += 1 xans = [0 for i in range(n+1)] yans = [0 for i in range(n+1)] if x >= 0: if pmnum[2] >= 1: for i in range((n-x)//2+1): xans[x+i*2] = kaijo[x+i+pmnum[0]-1] * invkaijo[x+i] % p * invkaijo[pmnum[0]-1] % p xans[x+i*2] = xans[x+i*2] * kaijo[i+pmnum[2]-1] % p * invkaijo[i] % p * invkaijo[pmnum[2]-1] % p else: xans[x] = 1 else: x = -x if pmnum[2] >= 1: for i in range((n-x)//2+1): xans[x+i*2] = kaijo[x+i+pmnum[2]-1] * invkaijo[x+i] % p * invkaijo[pmnum[2]-1] % p xans[x+i*2] = xans[x+i*2] * kaijo[i+pmnum[0]-1] % p * invkaijo[i] % p * invkaijo[pmnum[0]-1] % p if pmnum[1] >= 1: if y >= 0: if pmnum[3] >= 1: for i in range((n-y)//2+1): yans[y+i*2] = kaijo[y+i+pmnum[1]-1] * invkaijo[y+i] % p * invkaijo[pmnum[1]-1] % p yans[y+i*2] = yans[y+i*2] * kaijo[i+pmnum[3]-1] % p * invkaijo[i] % p * invkaijo[pmnum[3]-1] % p else: yans[y] = 1 else: y = -y if pmnum[3] >= 1: for i in range((n-y)//2+1): yans[y+i*2] = kaijo[y+i+pmnum[3]-1] * invkaijo[y+i] % p * invkaijo[pmnum[3]-1] % p yans[y+i*2] = yans[y+i*2] * kaijo[i+pmnum[1]-1] % p * invkaijo[i] % p * invkaijo[pmnum[1]-1] % p else: if y == 0: yans[0] = 1 ans = 0 for i in range(n+1): ans = (ans + xans[i] * yans[n-i] % p) % p print("{}".format(ans))