#include <bits/stdc++.h>
using namespace std;
char buf[1 << 21], *p1 = buf, *p2 = buf;
template <class T>
inline void read(T &x) {
  x = 0;
  char c =
      (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2)
           ? EOF
           : *p1++);
  bool f = 0;
  for (; !isdigit(c);
       c = (p1 == p2 &&
                    (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2)
                ? EOF
                : *p1++))
    f ^= c == '-';
  for (; isdigit(c);
       c = (p1 == p2 &&
                    (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2)
                ? EOF
                : *p1++))
    x = (x << 3) + (x << 1) + (c ^ 48);
  x = f ? -x : x;
}
template <class T>
inline void write(T x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  T y = 10, len = 1;
  while (y <= x) {
    y *= 10;
    ++len;
  }
  while (len--) {
    y /= 10;
    putchar(x / y + 48);
    x %= y;
  }
}
const int MAXN = 100, MOD = 1e8;
int n1, n2, k1, k2, f[MAXN << 1 | 1][MAXN + 1][2];
int main() {
  read(n1), read(n2), read(k1), read(k2);
  f[0][0][0] = f[0][0][1] = 1;
  for (int i = 1; i <= n1 + n2; ++i)
    for (int j = max(0, i - n2); j <= min(n1, i); ++j) {
      for (int k = 1; k <= min(k1, j); ++k)
        f[i][j][0] = (f[i][j][0] + f[i - k][j - k][1]) % MOD;
      for (int k = 1; k <= min(k2, i - j); ++k)
        f[i][j][1] = (f[i][j][1] + f[i - k][j][0]) % MOD;
    }
  write((f[n1 + n2][n1][0] + f[n1 + n2][n1][1]) % MOD);
  putchar('\n');
  return 0;
}
