import Data.Bits
import Data.List
import qualified Data.Vector.Unboxed as VU

modulus :: Int
modulus = 10 ^ 9 + 7

addMod :: Int -> Int -> Int
addMod x y = (x + y) `mod` modulus

mulMod :: Int -> Int -> Int
mulMod x y = (x * y) `mod` modulus

powMod :: Int -> Int -> Int
powMod _ 0 = 1
powMod n m
    | m .&. 1 == 0 = mulMod x x
    | otherwise = mulMod n . powMod n $ m - 1 where
          x = powMod n $ m `div` 2

newFacts :: Int -> VU.Vector Int
newFacts n =
  VU.scanl (\x y -> if x == 0 then 1 else mulMod x y) 1 $ VU.enumFromTo 1 $ n - 1

invFacts :: Int -> VU.Vector Int -> Int
invFacts 0 facts = 1
invFacts x facts =
  if x == 0 then 1 else powMod (facts VU.! x) $ modulus - 2

cmb :: Int -> Int -> VU.Vector Int -> Int
cmb x y facts = (facts VU.! (x + y)) `mulMod` (invFacts x facts) `mulMod` (invFacts y facts)

routesVia :: Int -> Int -> Int -> Int -> VU.Vector Int -> Int
routesVia x y w h facts =
  (cmb x y facts) `mulMod` (cmb x' y' facts)
  where
    x' = w - x
    y' = h - y

allRoutes :: Int -> Int -> Int -> Int -> VU.Vector Int -> Int
allRoutes h w a b facts =
  foldl'
    (\acc x -> acc `addMod` routesVia (b+x) (h-a-1-x) (w-1) (h-1) facts)
    0
    [0..(h-a-1) `min` (w-b-1)]

main = do
  [h, w, a, b] <- map (read :: String -> Int) . words <$> getLine
  let facts = newFacts(h+w-2)
  putStrLn $ show $ allRoutes h w a b facts