{-# OPTIONS_GHC -O #-}
import Data.List
import Data.Array.Unboxed

mp = 1000000007

powmod = pd' 1 where
    pd' x _ 0 = x
    pd' x a b
        | odd b = pd' (mod (x*a) mp) a (b-1)
        | otherwise = pd' x (mod (a*a) mp) (div b 2)

facts n = listArray (0,n) $ scanl' (\f n->(mod (f*n) mp)) 1 [1..]
ifacts fs = array (0,n) $ take (n+1) $ iterate psi (n,im) where
    n = snd $ bounds fs
    im = powmod (fs ! n) (mp-2)
    psi (n,m) = (n-1, mod (m*n) mp)

cmbmod fs ifs n k = (`mod` mp) $ (* t3) $ (`mod` mp) $ t1*t2 where
    t1 = fs ! n
    t2 = ifs ! k
    t3 = ifs ! (n-k)

main = do
    (h:w:a:b:_)<-map read.words<$>getLine::IO[Int]
    let fs = facts (h+w-2) :: UArray Int Int
    let ifs = ifacts fs :: UArray Int Int
    print $ foldl' (\a x->mod (a+x) mp) 0 $ unfoldr (way fs ifs) (b + (h-a-1), b, a-1 + (w-b-1), w-b-1)
way _ _ (_,_,_,-1) = Nothing
way fs ifs (n1,k1,n2,k2) = Just (mod (w1*w2) mp, (n1+1, k1+1, n2-1, k2-1)) where
    w1 = cmbmod fs ifs n1 k1
    w2 = cmbmod fs ifs n2 k2
