PROGRAM ATCODER

implicit none
double precision :: h, w, a, b
double precision :: m, s, sum, c1, c2
integer :: i, j

read(*,*) h, w, a, b

sum = 0.d0

do i = 0, int(h-a-1) !(b,i+1)に到達するまでに下に移動する回数
	if (i == 0)then
    	c1 = 1.d0
    else if(i == 1)then
    	c1 = b
    else
    	m = mod(dble(i),10.d0**9+7.d0)
        s = mod(b+dble(i)-1,10.d0**9+7.d0)
    	do j = i-1, 1, -1
    		m = m*mod(dble(j),10.d0**9+7.d0)
        	s = s*mod(b+dble(j)-1.d0,10.d0**9+7.d0)
    	end do
        if (s == 0)then
        	s = 1.d0
        end if
		c1 = s/m
    end if
    m = mod(h-dble(i)-1,10.d0**9+7.d0)
    s = mod(w+h-b-dble(i)-2,10.d0**9+7.d0)
    do j = int(h-i-2), 1, -1
    	m = m*mod(dble(j),10.d0**9+7.d0)
        s = s*mod(w-b+dble(j)-1.d0,10.d0**9+7.d0)
    end do
    if (m == 0)then
        m = 1.d0
    end if
    if (s == 0)then
        c2 = 1.d0
    else
    	c2 = s/m
    end if
    sum = sum + c1*c2
end do

write(*,'(i0)') int(mod(sum,10.d0**9+7.d0))

END PROGRAM ATCODER