#include<bits/stdc++.h>
using namespace std;
//define!
#define psba push_back
#define vet vector<int>
#define ll long long
#define con const int
#define conll const long long
#define conti continue
#define bre break
#define vetpa vector<pair<int,int> >
#define fir first
#define sec second
#define intpair pair<int,int>
#define llpair pair<ll,ll>
//update:2024/8/2
con N=25;
int n,k,s,a[N],l[N];
ll ans=0;
map<llpair,ll> mp;
map<ll,bool> vis;
ll use(int x){
ll ans=1;
for(int i=x;i>=1;i--){
if(ans>s/i)return -1;
ans*=i;
}
return ans;
}
void check(){
ll sum=0,tot=0;
for(int i=1;i<=n/2;i++){
if(l[i]==2){
int L=use(a[i]);
if(L==-1||sum+L>s||tot+1>k)return;
sum+=L;
tot++;
}
if(l[i]==3){
if(sum+a[i]>s)return;
sum+=a[i];
}
}
mp[{tot,sum}]++;
vis[sum]=true;
}
void dfs(int x){
if(x>n/2){
check();
return;
}
for(int i=1;i<=3;i++){
l[x]=i;
dfs(x+1);
}
}
ll answer(ll tot,ll sum){
ll out=0;
for(int i=0;i<=tot;i++){
out+=mp[{i,sum}];
}
return out;
}
void CHECK(){
ll sum=0,tot=0;
for(int i=n/2+1;i<=n;i++){
if(l[i]==2){
int L=use(a[i]);
if(L==-1||sum+L>s||tot+1>k)return;
sum+=L;
tot++;
}
if(l[i]==3){
if(sum+a[i]>s)return;
sum+=a[i];
}
}
if(vis.count(s-sum))ans+=answer(k-tot,s-sum);
}
void DFS(int x){
if(x>n){
CHECK();
return;
}
for(int i=1;i<=3;i++){
l[x]=i;
DFS(x+1);
}
}
int main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>n>>k>>s;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dfs(1);
DFS(n/2+1);
cout<<ans<<endl;
// fclose(stdin);
// fclose(stdout);
return 0;
}
WA on#6