#include<bits/stdc++.h>
#define fu(i,a,b) for(register int i = a, I = (b) + 1; i < I; ++i)
#define fd(i,a,b) for(register int i = a, I = (b) - 1; i > I; --i)
using namespace std;
typedef long long ll;
const int N=31;
const int M=112;
const int mod=998244353;
const int maxx=30*4096-1;
inline int read(){
int x=0;char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x;
}int n,m,k,ans;
int v[M];
int dp[maxx+1][N];
inline int num(int x){
int res=0;
fu(i,0,30)if(x&(1<<i))res++;
return res;
}
signed main(){
n=read(),m=read(),k=read();
fu(i,0,m)
v[i]=read();
dp[0][0]=1;
fu(i,1,n){
fu(j,0,maxx){
fu(c,0,m){
if(j>=(1<<c))dp[j][i]=(dp[j][i]+(ll)dp[j-(1<<c)][i-1]*v[c]%mod)%mod;
}
}
}fu(j,0,maxx){
if(num(j)<=k && dp[j][n])ans+=dp[j][n]%=mod;
}
printf("%lld\n",ans);
return 0;
}