#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INDEX(i, j) ((j) + (i) * w)
#define AT(i, j) p[INDEX(i, j)]
#define INBOUND(i, j) (i) <= n && (j) <= m
int main()
{
unsigned n, m, hi, hj;
scanf("%u %u %u %u", &n, &m, &hi, &hj);
unsigned w = m + 1;
unsigned s = (n + 1) * w;
unsigned* p = malloc(s * sizeof(unsigned));
if (!p) return -1;
memset(p, 255, s * sizeof(unsigned));
AT(0, 0) = 1;
if (INBOUND(hi, hj)) AT(hi, hj) = 0;
if (INBOUND(hi + 2, hj + 1)) AT(hi + 2, hj + 1) = 0;
if (INBOUND(hi + 1, hj + 2)) AT(hi + 1, hj + 2) = 0;
if (INBOUND(hi - 1, hj + 2)) AT(hi - 1, hj + 2) = 0;
if (INBOUND(hi - 2, hj + 1)) AT(hi - 2, hj + 1) = 0;
if (INBOUND(hi - 2, hj - 1)) AT(hi - 2, hj - 1) = 0;
if (INBOUND(hi - 1, hj - 2)) AT(hi - 1, hj - 2) = 0;
if (INBOUND(hi + 1, hj - 2)) AT(hi + 1, hj - 2) = 0;
if (INBOUND(hi + 2, hj - 1)) AT(hi + 2, hj - 1) = 0;
for (unsigned j = 1; j < w; ++j) if (AT(0, j)) AT(0, j) = AT(0, j - 1);
for (unsigned i = 1; i <= n; ++i) for (unsigned j = 0; j < w; ++j) {
if (AT(i, j)) {
if (j == 0) AT(i, j) = AT(i - 1, j);
else AT(i, j) = AT(i - 1, j) + AT(i, j - 1);
}
}
printf("%u", AT(n, m));
free(p);
return 0;
}