#include <bits/stdc++.h>
using namespace std;
#define all(container) (continer).begin(), (container).end()
#define sz(container)  (int) (container).size();
#define rall(container) (container).rbegin(), (container).rend()
using ll = long long;
#ifdef LOCAL_DEFINE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
    #include "../../library/DEBUG.hpp"
#else
    #define debug(...) 0
#endif

template<class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; }
template<class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; }

template<int Mod = 998244353>
class Modular {
private:
    int value;
    static int mod_inverse(int a, int mod) {
        a %= mod;
        assert(a);
        if (a == 1)
            return 1;
        return int(mod - ll(mod_inverse(mod, a)) * ll(mod) / a);
    }
public:
    Modular(): value(0) {}
    Modular(ll val):value(val % Mod) { if (value < 0) value += Mod;}
    friend std::ostream& operator << (std::ostream& out, const Modular& n) {return out << n.value;}
    friend std::istream& operator >> (std::istream& in, Modular& n) {ll v; in >> v; n = Modular(v); return in;}
    explicit operator int() const { return this->value;}
    friend bool operator == (const Modular& a, const Modular& b) {return a.value == b.value;}
    friend bool operator != (const Modular& a, const Modular& b) {return a.value != b.value;}

    Modular inverse() const {
        Modular ret;
        ret.value = mod_inverse(this->value, Mod);
        return ret;
    }
    Modular neg() const {
        Modular ret;
        ret.value = this->value ? Mod - this->value : 0;
        return ret;
    }
    Modular operator- (){return neg();}
    Modular& operator++ () {this->value++; if (this->value == Mod) this->value = 0; return *this;}
    Modular& operator-- () {if (this->value == 0) this->value = Mod; --this->value; return *this;}
    Modular& operator+= (const Modular& other) {this->value += other.value; if (this->value >= Mod) this->value -= Mod; return *this;}
    Modular& operator-= (const Modular& other) {this->value -= other.value; if (this->value < 0) this->value += Mod; return *this;}
    Modular& operator*= (const Modular& other) {this->value = ll(this->value) * ll(other.value) % Mod; return *this;}    
    Modular& operator/= (const Modular& other) {return *this *= other.inverse();}
    friend Modular operator ++ (Modular& a, int) {Modular ret = a; ++a; return ret;}
    friend Modular operator -- (Modular& a, int) {Modular ret = a; --a; return ret;}
    friend Modular operator + (const Modular& a, const Modular& b) {Modular ret = a; ret += b; return ret;}
    friend Modular operator - (const Modular& a, const Modular& b) {Modular ret = a; ret -= b; return ret;}
    friend Modular operator * (const Modular& a, const Modular& b) {Modular ret = a; ret *= b; return ret;}
    friend Modular operator / (const Modular& a, const Modular& b) {Modular ret = a; ret /= b; return ret;}
};
using Mint = Modular<int(1e9 + 7)>;
const int maxn = 1e6 + 1;
vector<Mint> fact(maxn);

int main(void) {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  fact[0] = 1;
  for (int i = 1; i < maxn; i++) {
    fact[i] = i * fact[i - 1];
  }
  int h, w, a, b;
  cin >> h >> w >> a >> b;
  auto choose = [&](int n, int r) {
    Mint den = fact[n - r] * fact[r];
    Mint ret = fact[n] * den.inverse();
    return ret;
  };
  Mint ans = 0;
  for (int i = 0; i <= h - a - 1; i++) {
    ans += choose(i + b - 1, b - 1) * choose(h - 1 - i + w - 1 - b, h - i - 1);
  }
  cout << ans << '\n';
  return 0;
}

Measured memory_bytes: 4224