#include <bits/stdc++.h>
using namespace std;
int a[50];
vector<int> v1, v2;
map<long long, long long> M1[25][50], M2[25][50];
long long fact[20];
void calc(vector<int> &v, map<long long, long long> M[25][50], int K,
          long long S) {
  int sz = v.size();
  map<long long, long long>::iterator it;
  M[0][0][0] = 1;
  for (int i = (0); i < (sz); i++) {
    M[i + 1][0][0] = 1;
    long long s1 = v[i];
    long long s2 = 0;
    if (v[i] < 20) s2 = fact[v[i]];
    for (int j = (0); j <= (K); j++) {
      for (it = M[i][j].begin(); it != M[i][j].end(); ++it) {
        long long sum = it->first;
        long long cnt = it->second;
        long long ns1 = s1 + sum;
        long long ns2 = s2 + sum;
        if (ns1 <= S) M[i + 1][j][ns1] += cnt;
        if (s2 && ns2 <= S) M[i + 1][j + 1][ns2] += cnt;
        if (sum != 0) M[i + 1][j][sum] += cnt;
      }
    }
  }
}
void solution() {
  int n, k;
  long long S;
  cin >> n >> k >> S;
  for (int i = (1); i <= (n); i++) cin >> a[i];
  int md = n / 2;
  for (int i = (1); i <= (md); i++) v1.push_back(a[i]);
  for (int i = (md + 1); i <= (n); i++) v2.push_back(a[i]);
  fact[1] = 1;
  for (int i = (2); i <= (19); i++) fact[i] = fact[i - 1] * i;
  calc(v1, M1, k, S);
  calc(v2, M2, k, S);
  map<long long, long long>::iterator it;
  int m1 = v1.size();
  int m2 = v2.size();
  long long ans = 0;
  for (int j = (0); j <= (k); j++) {
    for (it = M1[m1][j].begin(); it != M1[m1][j].end(); ++it) {
      for (int j2 = (0); j2 <= (k - j); j2++)
        ans += it->second * M2[m2][j2][S - it->first];
    }
  }
  cout << ans << '\n';
}
int main() { solution(); }
