#include<bits/stdc++.h>
//#include<map>
using namespace std;
typedef long long ll;
const ll mod=998244353;
int m,erdcl[101],n,clwz[101],a[101],sum;
ll read(){
int x;
scanf("%d",&x);
return x;
}
ll power(int a,int b){
ll base=a;
ll ans=1;
while(b){
if(b&1){
ans*=base;
ans%=mod;
}
base*=base;
base%=mod;
b>>=1;
}
return ans;
}
int C(int a,int b){
ll ans=1,ans2=1;
for(int i=2;i<=a;i++){
ans*=i;
}
for(int i=2;i<=b;i++){
ans2*=i;
// ans/=i;
}
ans2=power(ans2%mod,mod-2)%mod;
ans*=ans2;
ans%=mod;
ans2=1;
for(int i=2;i<=a-b;i++){
ans2*=i;
// ans/=i;
}
ans2=power(ans2%mod,mod-2)%mod;
ans*=ans2;
ans%=mod;
return ans;
}
int lowbit(int x){
int sum=0;
while(x){
x&=x-1;
sum++;
}
return sum;
}
bool xunwen(int val,int wz){
if(wz>n){
return (val==0);
}
for(int i=m;i>=0;i--){
if(erdcl[i]<=val){
clwz[wz]=i;
if(xunwen(val-erdcl[i],wz+1)){
return 1;
}
// break;
}
}
return 0;
}
int main(){
// freopen("sequence.in","r",stdin);
// freopen("sequence.out","w",stdout);
ll answ=0,cooh,k,qwq;
n=read();
m=read();
k=read();
for(int i=0;i<=m;i++){
erdcl[i]=power(2,i);
}
for(int i=0;i<=m;i++){
a[i]=read();
}
// for(i=1;i<=m;i++){
// dfs(1,0);
// if(lowbit(i)==k){
// chazhao(i);
// }
// }
for(int i=n;i<=n*(power(2,m));i++){
if(lowbit(i)==k){
sum=0;qwq=0;
bool az=xunwen(i,1);
cooh=1;
for(int o=1;o<=n;o++){
cooh*=a[clwz[o]];
qwq+=clwz[o]?0:1;
}
answ+=cooh*C(n,n-qwq);
}
}
cout<<answ;
return 0;
}
//5 1 1 2 1
//ba le yi ge luo bo bo bo
//bool chaozhao(int val,int wz,int havezhi){
// if(wz>m){
// return val==havezhi?1:0;
// }
// for(i=0;i<=m;i++){
// chazhao(val,wz+1,havezhi+power(2,i));
// }
//}
//void chazhao(int val){
// int i=0;
// while(val){
// if(val&1){
// sum++;
// stck[i]=1;
// }
// val>>=1;
// i++;
// }
//}
//void dfs(int wz,int sz){
// if(sz>k)
// return;
// if(wz>m){
// for(int i=1;i<=n;i++){
//
// }
// }
// dfs(wz+1,sz);
//// for(i=1;i<=2;i++){
// edj[wz]=1;
// dfs(wz+1);
//// }
//}