template <classT> inlinevoidchmin(T &x, const T &y){ if (x > y) { x = y; } } template <classT> inlinevoidchmax(T &x, const T &y){ if (x < y) { x = y; } }
constint mod = 998244353;
template <classT> inlineintnorm(T x){ x %= mod; return x < 0 ? x + mod : x; }
inlinevoidadd(int &x, constint &y){ x += y; if (x >= mod) x -= mod; } inlinevoiddec(int &x, constint &y){ x -= y; if (x < 0) x += mod; } inlinevoidmul(int &x, constint &y){ x = 1ll * x * y % mod; } inlinevoidneg(int &x){ if (x) x = mod - x; }
template <classT> inlineintqpow(int a, T b, int p){ int ans = 1; for (; b; b >>= 1) { if (b & 1) ans = 1ll * ans * a % p; a = 1ll * a * a % p; } return ans; }
structBinomCoef { std::vector<int> fact, facv;
BinomCoef() {} BinomCoef(int n) { init(n); }
voidinit(int n){ fact.resize(n + 1), facv.resize(n + 1); fact[0] = 1; for (int i = 1; i <= n; i ++) { fact[i] = 1ll * fact[i - 1] * i % mod; } facv[n] = qpow(fact[n], mod - 2, mod); for (int i = n - 1; i >= 0; i --) { facv[i] = 1ll * facv[i + 1] * (i + 1) % mod; } }
intbinom(int n, int m){ if (n < m || m < 0) { return0; } return1ll * facv[m] * facv[n - m] % mod * fact[n] % mod; } } bc(4000000);
voidwork(){ int n, m, c, a, b; std::cin >> n >> m >> c >> a >> b; if (m < n || (m - n) % c != 0) { std::cout << 0 << '\n'; return; }
int k = (m - n) / c; int p = 1ll * a * qpow(b, mod - 2, mod) % mod;
int ans = 1ll * bc.binom(m, k) * n % mod * qpow(m, mod - 2, mod) % mod; mul(ans, 1ll * qpow(p, k, mod) * qpow(mod + 1 - p, m - k, mod) % mod); std::cout << ans << '\n'; }