#include<bits/stdc++.h>
using namespace std;
const int maxn = 167;
const int mo = 998244353;
int T,m,k,N;
long long n;
int tot,Idx;
struct tup{
int s[4];
bool operator < (const tup &x)const{
for(int i=1;i<=3;i++)
if(s[i]<x.s[i])return 1;
else if(s[i]>x.s[i])return 0;
return 0;
}
}r[maxn],cur;
map<tup,int>mp;
void dfs(int Id){
if(Id==m+1){
mp[cur]=++Idx;
r[Idx]=cur;
return;
}
for(int i=0;i<=k-tot;i++){
tot+=i;
cur.s[Id]=i;
dfs(Id+1);
cur.s[Id]=0;
tot-=i;
}
}
struct Matrix{
int x[maxn][maxn];
void clear(int ty){
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
x[i][j]=(ty?(i==j):0);
}
Matrix operator * (const Matrix t){
Matrix ret;
ret.clear(0);
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
for(int k=1;k<=N;k++)
ret.x[j][i]=(1ll*ret.x[j][i]+(1ll*x[j][k]*t.x[k][i])%mo)%mo;
return ret;
}
void outp(){
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++)
cout<<x[i][j]<<' ';
cout<<endl;
}
}
}O,o,base[62];
Matrix ksm(int t){
Matrix ret;
ret.clear(1);
O=o;
while(t){
if(t&1)ret=ret*O;
O=O*O;
t>>=1;
}
return ret;
}
int ksm(int b,int t){
int ret=1;
while(t){
if(t&1)ret=(1ll*ret*b)%mo;
b=(1ll*b*b)%mo;
t>>=1;
}
return ret;
}
int inv(int x){
return ksm(x,mo-2);
}
int ans[2][maxn];
signed main(){
cin>>T>>m>>k;
for(int i=0;i<=3;i++)
cur.s[i]=0;
dfs(1);
N=Idx+1;
int Id=mp[{(m==1),(m==2),(m==3)}];
for(int i=1;i<=N;i++)
O.x[i][N]=1;
O.x[N][N]=o.x[N][N]=1;
for(int i=1;i<=Idx;i++){
int S[4]={0,0,0,0},tot=0;
for(int j=1;j<=m;j++)
S[j]=r[i].s[j],tot+=S[j];
for(int j=1;j<=m;j++){
if(S[j]==0)continue;
tup gen;
if(tot==k||j==1)gen={0,S[1]-(j==1)+(j==2),S[2]-(j==2)+(j==3),S[3]-(j==3)};
else gen={0,S[1]-(j==1)+(j==2)+(m==1),S[2]-(j==2)+(j==3)+(m==2),S[3]-(j==3)+(m==3)};
o.x[i][mp[gen]]=(1ll*S[j]*inv(tot+1))%mo;
}
o.x[i][i]=o.x[i][N]=inv(tot+1);
}
base[0]=o;
for(int i=1;i<=60;i++)
base[i]=base[i-1]*base[i-1];
while(T--){
cin>>n;
int pos=mp[{{0,(m==1),(m==2),(m==3)}}];
for(int i=1;i<=N;i++)
ans[0][i]=ans[1][i]=0;
ans[0][pos]=1;
int cnt=0;
for(int r=0;r<=60;r++)
if(n&(1ll<<r)){
cnt++;
int ooo=cnt&1;
for(int i=1;i<=N;i++)
ans[ooo][i]=0;
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++)
ans[ooo][i]=(ans[ooo][i]+(1ll*ans[ooo^1][j]*base[r].x[j][i])%mo)%mo;
}
}
cout<<ans[cnt&1][N]<<endl;
}
}