#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7;
inline int rd() {
  int x = 0;
  char c = getchar();
  bool f = false;
  while (!isdigit(c)) {
    if (c == '-') f = true;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c ^ 48);
    c = getchar();
  }
  return f ? -x : x;
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
int sqr(int x) { return x * x; }
map<pair<long long, int>, int> a, b;
int v[200005];
long long f[30], Sum;
int n, K;
void dfs1(int pos, long long res, int k) {
  if (res > Sum) return;
  if (k > K) return;
  if (pos > n / 2) {
    a[pair<long long, int>(res, k)]++;
    return;
  }
  dfs1(pos + 1, res + v[pos], k);
  dfs1(pos + 1, res, k);
  if (v[pos] <= 20) {
    dfs1(pos + 1, res + f[v[pos]], k + 1);
  }
}
void dfs2(int pos, long long res, int k) {
  if (res > Sum) return;
  if (k > K) return;
  if (pos > n) {
    b[pair<long long, int>(res, k)]++;
    return;
  }
  dfs2(pos + 1, res + v[pos], k);
  dfs2(pos + 1, res, k);
  if (v[pos] <= 20) dfs2(pos + 1, res + f[v[pos]], k + 1);
}
int main() {
  f[0] = f[1] = 1;
  for (int i = 2; i <= 21; i++) f[i] = f[i - 1] * i;
  cin >> n >> K;
  cin >> Sum;
  for (int i = 1; i <= n; i++) scanf("%d", &v[i]);
  dfs1(1, 0, 0);
  dfs2(n / 2 + 1, 0, 0);
  long long ans = 0;
  map<pair<long long, int>, int>::iterator it;
  for (it = a.begin(); it != a.end(); it++) {
    int use = ((*it).first).second;
    for (int i = 0; i + use <= K; i++) {
      if (b.count(make_pair(Sum - (*it).first.first, i))) {
        ans += 1ll * (it->second) * b[make_pair(Sum - (it->first.first), i)];
      }
    }
  }
  cout << ans * 1ll << endl;
  return 0;
}
