let rec power ( * ) one m = function
  | 0 -> one
  | n when n mod 2 = 0 ->
      power ( * ) one (m * m) (n / 2)
  | n ->
      m * power ( * ) one m (n - 1)

let memoize n f =
  let dp = Hashtbl.create n in
  let rec get x k =
    try k @@ Hashtbl.find dp x with
    | Not_found ->
        f get x @@ fun y ->
          Hashtbl.add dp x y; k y in get

let m = 1000000007
let ( +^ ) x y = (x + y) mod m
let ( *^ ) x y = (x * y) mod m
let inv n = power ( *^ ) 1 n (m - 2)

let () = Scanf.scanf "%d %d %d %d" @@ fun h w a b ->
  let fact = memoize (h + w) @@ fun fact n k ->
    if n <= 1 then k 1
    else fact (n - 1) @@ fun x -> k @@ n *^ x in
  let fact n = fact n @@ fun x -> x in
  let inv_fact = memoize (h + w) @@ fun inv_fact n k ->
    if n <= 1 then k 1
    else inv_fact (n - 1) @@ fun x -> k @@ inv n *^ x in
  let inv_fact n = inv_fact n @@ fun x -> x in
  Printf.printf "%d\n" @@ Array.fold_left ( +^ ) 0 @@ Array.init (h - a) @@ fun i ->
    fact(i + b - 1) *^ fact(h + w - 2 - i - b) *^ inv_fact(i) *^ inv_fact(b - 1) *^ inv_fact(h - i - 1) *^ inv_fact(w - b - 1)
