package main
import (
"fmt"
)
func main() {
N, M, K, P := 0, 0, 0, 0
for {
n, _ := fmt.Scan(&N, &M, &K, &P)
if n == 0 {
break
} else {
fmt.Println(process(N, M, K, P))
}
}
}
func process(n, m, k, p int) int {
// if k == 0 {
// if m == p {
// return 1
// } else {
// return 0
// }
// }
// sum := 0
// if m-1 > 0 {
// sum += process(n, m-1, k-1, p)
// }
// if m+1 <= n {
// sum += process(n, m+1, k-1, p)
// }
// return sum
// 时间o(n*k), 空间o(n*k)
// dp := make([][]int, k+1)
// for i := 0; i < len(dp); i++ {
// dp[i] = make([]int, n+1)
// }
// dp[0][p] = 1
// for i := 1; i <= k; i++ {
// for j := 1; j <= n; j++ {
// if j-1 > 0 {
// dp[i][j] += dp[i-1][j-1]
// dp[i][j] = dp[i][j] % (1e9 + 7)
// }
// if j+1 <= n {
// dp[i][j] += dp[i-1][j+1]
// dp[i][j] = dp[i][j] % (1e9 + 7)
// }
// }
// }
// return dp[k][m]
// 时间o(n*k), 空间o(n)
dp := make([]int, n+1)
dp[p] = 1
prejbefore := 0
for i := 1; i <= k; i++ {
for j := 1; j <= n; j++ {
add := prejbefore
// 更新前保留
prejbefore = dp[j]
dp[j] = add
if j+1 <= n {
dp[j] += dp[j+1]
dp[j] = dp[j] % (1e9 + 7)
}
}
}
return dp[m]
}