inline i64 rd(){ i64 x = 0, f = 1, c = getchar(); while (((c - '0') | ('9' - c)) < 0) f = c != '-', c = getchar(); while (((c - '0') | ('9' - c)) > 0) x = x * 10 + c - '0', c = getchar(); return f ? x : -x; }
structGen { using ull = unsignedlonglong; ull rand_num; inlinevoidinit(ull seed){ rand_num = seed; } inline ull next(){ ull z = (rand_num += 0x9e3779b97f4a7c15); z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9; z = (z ^ (z >> 27)) * 0x94d049bb133111eb; return z ^ (z >> 31); } inlineintrnr(int l, int r){ return l + (int)(next() % (r - l + 1)); } inlinevoidget(int &a, int &b, int &c, int &d){ int divpart = rnr(0, 100); a = rnr(0, divpart), b = divpart - a; c = rnr(0, 100 - divpart), d = 100 - divpart - c; } } Ge;
constint N = 5e6; const i64 P = 998244353; inline i64 fpow(i64 b, i64 p){ i64 res = 1; for (; p; b = b * b % P, p >>= 1) { if (p & 1) res = res * b % P; } return res; } i64 I[101];
int type; int n, k; i64 e[N + 5], p[N + 5], ip[N + 5]; i64 pr[N + 5], ipr[N + 5]; int fl[N + 5]; i64 f[N + 5];
intmain(){ for (int i = 1; i <= 100; i++) I[i] = fpow(i, P - 2);
type = rd(), Ge.init(rd()); n = rd(), k = rd(); for (int i = 1, p1, p2, p3, p4; i <= n; i++) { if (!type) p1 = rd(), p2 = rd(), p3 = rd(), p4 = rd(); else Ge.get(p1, p2, p3, p4); e[i] = (300 * p1 + 100 * p2 + 50 * p3) % P * I[100] % P; p[i] = p4 * I[100] % P, ip[i] = 100 * I[p4] % P; }