rt
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
int x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9'){
if (ch=='-')
f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+ch-48;
ch=getchar();
}
return x*f;
}
inline void put(int x)
{
if (x > 9) put(x / 10);
putchar(x % 10 + 48);
}
int n=read(),k=read(),s=read(),ans,a[1000005];
unordered_map<int,int> mp[1000005];
int hp(int x){
int res=1;
for(int i=2; i<=x; i++)
res*=i;
return res;
}
void dfs(int nw_cur,int nw_k,int nw_sum){
if(nw_k>k||nw_sum>s)
return;
if(nw_cur>n/2){
// if(nw_k<=k&&nw_sum==s)
// ans++;
mp[nw_k][nw_sum]++;
return;
}
if(a[nw_cur]<=19)
dfs(nw_cur+1,nw_k+1,nw_sum+hp(a[nw_cur]));
dfs(nw_cur+1,nw_k,nw_sum);
dfs(nw_cur+1,nw_k,nw_sum+a[nw_cur]);
}
void dfs2(int nw_cur,int nw_k,int nw_sum){
if(nw_k>k||nw_sum>s)
return;
if(nw_cur>n){
// if(nw_k<=k&&nw_sum==s)
// ans++;
for(int i=0; i<=k-nw_k; i++)
ans+=mp[i][s-nw_sum];
return;
}
if(a[nw_cur]<=19)
dfs2(nw_cur+1,nw_k+1,nw_sum+hp(a[nw_cur]));
dfs2(nw_cur+1,nw_k,nw_sum);
dfs2(nw_cur+1,nw_k,nw_sum+a[nw_cur]);
}
signed main(){
for(int i=1; i<=n; i++)
a[i]=read();
for(int i=1; i<=n/2; i++)
dfs(1,0,0);
dfs2(n/2+1,0,0);
cout<<ans;
return 0;
}