#include <bits/stdc++.h>
using namespace std;
long long pot[15];
long long fact[19];
map<long long, long long> mop[20];
vector<long long> results[20];
int main() {
  pot[0] = 1;
  fact[0] = 1;
  for (int i = 1; i < 19; i++) fact[i] = 1LL * fact[i - 1] * i;
  for (int i = 1; i < 15; i++) pot[i] = 3LL * pot[i - 1];
  int n, k;
  long long s;
  cin >> n >> k;
  cin >> s;
  vector<long long> v;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    v.push_back(x);
  }
  int n1 = n / 2;
  int n2 = n - n1;
  int shift = 0;
  for (int i = 0; i < pot[n1]; i++) {
    vector<int> cur;
    int u = i;
    for (int j = 0; j < n1; j++) {
      cur.push_back(u % 3);
      u /= 3;
    }
    long long suma = 0;
    int marks = 0;
    for (int j = 0; j < n1; j++) {
      if (cur[j] == 0) continue;
      if (cur[j] == 1) suma += v[shift + j];
      if (cur[j] == 2) {
        marks++;
        if (v[shift + j] > 18) {
          suma = -1;
          break;
        }
        suma += fact[v[shift + j]];
      }
    }
    if (suma <= s && suma >= 0) results[marks].push_back(suma);
  }
  shift = n1;
  for (int i = 0; i < pot[n2]; i++) {
    vector<int> cur;
    int u = i;
    for (int j = 0; j < n2; j++) {
      cur.push_back(u % 3);
      u /= 3;
    }
    long long suma = 0;
    int marks = 0;
    for (int j = 0; j < n2; j++) {
      if (cur[j] == 0) continue;
      if (cur[j] == 1) suma += v[shift + j];
      if (cur[j] == 2) {
        marks++;
        if (v[shift + j] > 18) {
          suma = -1;
          break;
        }
        suma += fact[v[shift + j]];
      }
    }
    if (suma <= s && suma >= 0) mop[marks][suma]++;
  }
  for (int i = n2 - 1; i >= 0; i--) {
    for (auto u : mop[i]) {
      for (int j = i + 1; j <= n2; j++) {
        mop[j][u.first] += u.second;
      }
    }
  }
  long long ans = 0;
  for (int i = 0; i <= n1; i++) {
    if (i > k) break;
    int dif = k - i;
    dif = min(dif, n2);
    for (auto e : results[i]) {
      if (mop[dif].find(s - e) != mop[dif].end()) {
        ans += mop[dif][s - e];
      }
    }
  }
  cout << ans << "\n";
  return 0;
}
