#include<iostream>
#include<map>
#define ll long long
using namespace std;
map<ll,ll> m[50];
ll n,k,S,t,ans;
ll a[50],f[50];
void dfs1(ll idx,ll sum,ll ch){//前部分
if(ch>k) return;
if(idx>t){
m[ch][sum]++;
return;
}
dfs1(idx+1,sum,ch);//不选
dfs1(idx+1,sum+a[idx],ch);//选
if(a[idx]<=20) dfs1(idx+1,sum+f[a[idx]],ch+1);//选!
}
void dfs2(ll idx,ll sum,ll ch){//后部分
if(ch>k) return;
if(idx>n){
for(ll i=0;i<=k-ch;i++) ans+=m[i][S-sum];
return;
}
dfs2(idx+1,sum,ch);//不选
dfs2(idx+1,sum+a[idx],ch);//选
if(a[idx]<=20) dfs2(idx+1,sum+f[a[idx]],ch+1);//选!
}
int main(){
cin>>n>>k>>S;
for(ll i=1;i<=n;i++) cin>>a[i];
f[1]=1;
for(ll i=2;i<=20;i++) f[i]=f[i-1]*i;
t=n/2;
dfs1(1,0,0);
dfs2(t+1,0,0);
cout<<ans<<endl;
return 0;
}