#include <bits/stdc++.h>
using namespace std;
long long n, k, s;
long long a[50];
long long fact[20];
map<long long, long long> arr[30];
map<long long, long long> arr1[30];
long long n1, n2;
void doit(int i, long long sum, int flag, int done) {
  if (i > (n1 + 1) || (flag > k) || sum > s)
    return;
  else {
    if (done) arr[flag][sum]++;
    doit(i + 1, sum, flag, 0);
    doit(i + 1, sum + a[i], flag, 1);
    if (a[i] <= 18) {
      doit(i + 1, sum + fact[a[i]], flag + 1, 1);
    }
  }
}
void doit1(int i, long long sum, int flag, int done) {
  if (i > n + 1 || flag > k || sum > s)
    return;
  else {
    if (done) arr1[flag][sum]++;
    doit1(i + 1, sum, flag, 0);
    doit1(i + 1, sum + a[i], flag, 1);
    if (a[i] <= 18) {
      doit1(i + 1, sum + fact[a[i]], flag + 1, 1);
    }
  }
}
int main() {
  long long i, j, t;
  fact[0] = 1;
  for (i = 1; i <= 19; i++) {
    fact[i] = (fact[i - 1] * i);
  }
  scanf("%lld%lld%lld", &n, &k, &s);
  ;
  n1 = n / 2;
  n2 = n;
  for (i = 1; i <= n; i++) scanf("%lld", &a[i]);
  ;
  doit(1, 0, 0, 0);
  doit1(n1 + 1, 0, 0, 0);
  arr[0][0] = 1;
  arr1[0][0] = 1;
  long long ans = 0;
  for (i = 0; i <= k; i++) {
    if ((int)arr[i].size() > 0) {
      int siz = arr[i].size();
      for (auto j = arr[i].begin(); j != arr[i].end(); j++) {
        long long aa = j->first;
        long long bb = j->second;
        for (int ttt = 0; ttt <= k - i; ttt++)
          ans = (ans + bb * arr1[ttt][s - aa]);
      }
    }
  }
  cout << ans << endl;
  return 0;
}
