#include using namespace std; //* ATCODER #include using namespace atcoder; typedef modint998244353 mint; //*/ /* BOOST MULTIPRECISION #include using namespace boost::multiprecision; //*/ typedef long long ll; #define rep(i, s, n) for (int i = (int)(s); i < (int)(n); i++) #define rrep(i, s, n) for (int i = (int)(n)-1; i >= (int)(s); i--) template bool chmin(T &a, const T &b) { if (a <= b) return false; a = b; return true; } template bool chmax(T &a, const T &b) { if (a >= b) return false; a = b; return true; } template T max(vector &a){ assert(!a.empty()); T ret = a[0]; for (int i=0; i<(int)a.size(); i++) chmax(ret, a[i]); return ret; } template T min(vector &a){ assert(!a.empty()); T ret = a[0]; for (int i=0; i<(int)a.size(); i++) chmin(ret, a[i]); return ret; } template T sum(vector &a){ T ret = 0; for (int i=0; i<(int)a.size(); i++) ret += a[i]; return ret; } int main(){ ll h, w, a, b; cin >> h >> w >> a >> b; vector imos_h(h+1); vector imos_w(w+1); rep(i,0,h-a+1){ imos_h[0] += 1; imos_h[h-a+1-i] -= 1; imos_h[1] += 1; imos_h[i+1] -= 1; } rep(i,0,w-b+1){ imos_w[0] += 1; imos_w[w-b+1-i] -= 1; imos_w[1] += 1; imos_w[i+1] -= 1; } rep(i,0,h) imos_h[i+1] += imos_h[i]; rep(i,0,w) imos_w[i+1] += imos_w[i]; mint ans = mint(2) * a * b * mint(h-a+1).pow(2) * mint(w-b+1).pow(2); mint hh = 0, ww = 0; rep(i,0,a+1){ hh += mint(a-i) * imos_h[i]; } rep(i,0,b+1){ ww += mint(b-i) * imos_w[i]; } ans -= hh * ww; ans /= mint(h-a+1).pow(2); ans /= mint(w-b+1).pow(2); cout << ans.val() << '\n'; }