#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 18000001
#define N2 500001
const int mod=998244353;
int *r=new int[N2],*f=new int[N2],*g=new int[N2];
int ksm(int a,int k){
int res=1;
while(k){
if(k&1) res=res*a%mod;
a=a*a%mod;
k>>=1;
}
return res;
}
void ntt(int *a,int n,int x) {
for(int i=0;i<n;i++) if(i<r[i]) swap(a[i],a[r[i]]);
for(int i=1;i<n;i<<=1) {
int z=ksm(3,(mod-1)/(i*2));
for(int j=0;j<n;j+=(i*2)) {
int t1,t2,g=1;
for(int k=0;k<i;k++,g=g*z%mod) {
t1=a[j+k],t2=g*a[j+k+i]%mod;
a[j+k]=(t1+t2)%mod,a[j+k+i]=(t1-t2+mod)%mod;
}
}
}
if(x==1) return;
int inv=ksm(n,mod-2);
reverse(a+1,a+n);
for(int i=0;i<n;i++) a[i]=a[i]*inv%mod;
}
void mul(int n,int m,int *a,int *b){
int len=1,l=0;
for(;len<=n+m;len<<=1,l++);
for(int i=1;i<len;i++) r[i]=(r[i/2]/2)|((i&1)<<(l-1));
ntt(a,len,1),ntt(b,len,1);
for(int i=0;i<=len;i++)a[i]=(a[i]*b[i])%mod;
ntt(a,len,-1);
}
void stirling(int n){
f[0]=1;
for(int i=1;i<=n;i++)f[i]=f[i-1]*i%mod;
f[n]=ksm(f[n],mod-2);
for(int i=n;i>=1;i--)f[i-1]=f[i]*i%mod;
for(int i=0;i<=n;i++){
if(i%2)g[i]=mod-f[i];
else g[i]=f[i];
f[i]=f[i]*ksm(i,n)%mod;
}
mul(n,n,f,g);
}
int n,m,s,l,a,b,c;
vector<int>fac,inv_fac;
signed main(){
cin>>n>>m>>s>>l;
stirling(l);
delete[] r;
delete[] g;
fac.push_back(1);
for(int i=1;i<=n;i++)fac.push_back(fac[i-1]*i%mod);
inv_fac.resize(n+1);
inv_fac[n]=ksm(fac[n],mod-2);
for(int i=n;i>=1;i--)inv_fac[i-1]=inv_fac[i]*i%mod;
while(s--){
cin>>a>>b>>c;
int cnt=min(l,min(b,c));
int ans=0;
for(int i=0;i<=cnt;i++){
ans=(ans+f[i]*inv_fac[b-i]%mod*fac[a-i]%mod*inv_fac[c-i])%mod;
}
cout<<ans*fac[b]%mod*fac[c]%mod*inv_fac[a]%mod<<endl;
}
}
开小 RE,开大 MLE,建议开到 500M,放一些多项式写烂的蒟蒻吧……