#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; bool rcmp(int a, int b) { return a>b; } typedef long long LL; typedef struct { int x, y; } PNode; PNode ps[200004]; bool mycmp(const PNode& a, const PNode& b) { if (a.x!=b.x) return a.x=n) break; if (yy[ni]==v) return ni; if (yy[ni]>v) break; i=ni; } d>>=1; } return i; } #define MOD 998244353 int expit(LL b, int m) { LL r=1; while(m) { if (m&1) { r*=b; r%=MOD; } b*=b; b%=MOD; m>>=1; } return r; } int mx, ix[1<<19]; int findm(int s, int e) { s+=mx; e+=mx; int r=ix[s]; while(s<=e) { if (s&1) { r=max(r, ix[s]); s++; } if ((e&1)==0) { r=max(r, ix[e]); e--; } s>>=1; e>>=1; } return r; } void setv(int i, int v) { i+=mx; if (ix[i]>=v) return; ix[i]=v; i>>=1; while(i) { ix[i]=max(ix[i*2], ix[i*2+1]); i>>=1; } } int main() { int n, i, m, y, x, j, w, p, h; LL rp, ivp; scanf("%d %d %d %d", &h, &w, &n, &p); ivp = expit(p, MOD-2); for (i=0; i