import java.util.*;

public class Main {
    static long nCr(int n, int r) {
        if (r < 0 || r > n) return 0;

        long[] C = new long[r + 1];
        C[0] = 1;

        for (int i = 1; i <= n; i++) {
            for (int j = Math.min(i, r); j > 0; j--) {
                C[j] = C[j] + C[j - 1];  // Pascal’s rule
            }
        }
        return C[r];
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        if (!sc.hasNextInt()) { System.out.println("Invalid input"); return; }
        int n = sc.nextInt();

        if (!sc.hasNextInt()) { System.out.println("Invalid input"); return; }
        int m = sc.nextInt();

        if (!sc.hasNextInt()) { System.out.println("Invalid input"); return; }
        int x = sc.nextInt();

        if (!sc.hasNextInt()) { System.out.println("Invalid input"); return; }
        int y = sc.nextInt();

        // Basic validation
        if (n < 1 || m < 1 || x < 1 || x > n || y < 1 || y > m) {
            System.out.println("Invalid input");
            return;
        }

        // Blocked cell cannot be start or end
        if ((x == 1 && y == 1) || (x == n && y == m)) {
            System.out.println("Invalid input");
            return;
        }

        // Total shortest paths from (1,1) to (n,m)
        long total = nCr(n + m - 2, n - 1);

        // Paths from (1,1) to (x,y)
        long toBlock = nCr((x - 1) + (y - 1), (x - 1));

        // Paths from (x,y) to (n,m)
        long fromBlock = nCr((n - x) + (m - y), (n - x));

        // Paths that pass through the blocked cell
        long blockedPaths = toBlock * fromBlock;

        long result = total - blockedPaths;

        System.out.println(result);
    }
}
