PROGRAM ATCODER

implicit none
integer(16) :: h,w,a,b,i,j,c1,c2,ans
integer(16),parameter :: intm = 1000000007
integer(16),allocatable :: k(:),k_r(:)

read(*,*) h,w,a,b
allocate(k(0:h+w-2),k_r(0:h+w-2))

k(0) = 1
k_r = 1

do i = 1, h+w-2
  k(i) = mod(k(i-1)*i,intm)
end do

do i = 1, h+w-2
  k_r(i) = pow(k(i),intm-int(2,16))
end do

ans = 0
do i = b, w-1
  c1 = mod(k(h-a-1+i)*k_r(i)*k_r(h-a-1),intm)
  c2 = mod(k(a+w-i-2)*k_r(w-1-i)*k_r(a-1),intm)
  ans = mod(ans+c1*c2,intm)
end do

print'(i0)', ans

contains
recursive integer(16) function pow(x,n) result(ret)
  implicit none
  integer(16) :: x,n
  if ( n == 0 ) then
    ret = 1
  else if ( n == 1 ) then
    ret = mod(x,10**9+7)
  else if ( mod(n,2) == 0 ) then
    ret = mod((pow(x,n/2))**2,10**9+7)
  else
    ret = mod((pow(x,n/2))**2*x,10**9+7)
  end if
end function pow

END PROGRAM ATCODER
