import qualified Data.Vector as V

po :: (Integral a) => a
po = 10^9 + 7

main :: IO ()
main = do
  [h, w, a, b] <- map read . words <$> getLine
  let
    fact = V.fromList $ take (w+h+1) $ 1:scanl1 (\x y -> x*y `mod` po) [1..]
    combi n m = (fact V.! n) * invertModp (fact V.! m) po * invertModp (fact V.! (n-m)) po `mod` po
  print $ sum [combi (h-a-1+i) i * combi (w-1-i+a-1) (a-1) | i <- [b..(w-1)]] `mod` po

invertModp :: Integer -> Integer -> Integer
invertModp a prm = if a `mod` prm == 0 then 0 else powMod' a (prm-2) prm

powMod' :: (Integral a) => Integer -> a -> Integer -> Integer
powMod' base expo md
  | md <= 0   = error "non-positive modulus"
  | md == 1   = 0
  | expo == 0 = 1
  | bsmd == 1 = 1
  | expo < 0  = error "negative exponent"
  | bsmd == 0 = 0
  | otherwise = powMod' base (expo `div` 2) md ^ 2 * (if expo `mod` 2 == 1 then base else 1) `mod` md
    where
      bsmd = if base < 0 || md <= base then base `mod` md else base