import Data.List

m :: Integer
m = 1000000007

main = do
    l <- getLine
    let (h,w,a,b) = parse l
    print $ solve h w a b

parse :: String -> (Int, Int, Int, Int)
parse s = let [h,w,a,b] = map read $ words s in (h,w,a,b)

solve :: Int -> Int -> Int -> Int -> Integer
solve h w a b = (sum $ map go [1..h-a]) `mod` m
    where go k = (count b k * count (w-b) (h-k+1)) `mod` m

count :: Int -> Int -> Integer
count w h = (facto (w+h-2) * powm (facto (w-1) * facto (h-1)) (m-2) m) `mod` m

powm :: Integer -> Integer -> Integer -> Integer
powm x 1 p = x `mod` p
powm x m p
    | m `mod` 2 == 0 = let h = powm x (m`div`2) p in (h * h) `mod` p
    | otherwise = let h = powm x (m `div`2) p in (h * h * x) `mod` p

facto :: Int -> Integer
facto = (map f [0..] !!)
    where f 0 = 1
          f n = (f (n-1) * n) `mod` m