#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const long long INF = 1e18;
const int32_t M = 1e8;
const int32_t MM = 998244353;
const long long N = 1e5 + 5;
long long dx[8] = {1, 0, -1, 0, 1, 1, -1, -1};
long long dy[8] = {0, 1, 0, -1, -1, 1, 1, -1};
template <typename T>
T gcd(T a, T b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
template <typename T>
T pow(T a, T b, long long m) {
  T ans = 1;
  while (b > 0) {
    if (b % 2 == 1) ans = (ans * a) % m;
    b /= 2;
    a = (a * a) % m;
  }
  return ans % m;
}
void setIO(string s) {
  freopen((s + ".in").c_str(), "r", stdin);
  freopen((s + ".out").c_str(), "w", stdout);
}
long long n1, n2, k1, k2;
long long dp[105][105][2][15];
long long count(long long r1, long long r2, long long lasttype,
                long long lastn) {
  long long &c = dp[r1][r2][lasttype][lastn];
  if (c == -1) {
    c = 0;
    if (r1 > 0) {
      if (lasttype == 1) {
        c += count(r1 - 1, r2, 0, 1);
        c %= M;
      } else if (lastn < k1) {
        c += count(r1 - 1, r2, 0, lastn + 1);
        c %= M;
      }
      c %= M;
    }
    if (r2 > 0) {
      if (lasttype == 0) {
        c += count(r1, r2 - 1, 1, 1);
        c %= M;
      } else if (lastn < k2) {
        c += count(r1, r2 - 1, 1, lastn + 1);
        c %= M;
      }
      c %= M;
    }
    if (r1 == 0 && r2 == 0) {
      c = 1;
    }
    c %= M;
  }
  return c % M;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n1 >> n2 >> k1 >> k2;
  memset(dp, -1, sizeof(dp));
  cout << count(n1, n2, 0, 0);
  return 0;
}
