#include <bits/stdc++.h>
using namespace std;
void chkmin(int &a, int b) { a > b ? a = b : 0; }
void chkmax(int &a, int b) { a < b ? a = b : 0; }
void Rd(int &x) {
  x = 0;
  char c;
  while (c = getchar(), c < 48)
    ;
  do x = (x << 1) + (x << 3) + (c ^ 48);
  while (c = getchar(), c > 47);
}
long long Fac[20];
int n, K;
int A[30], C[20];
map<long long, int> mp[13];
int Cnt[1 << 20];
long long S;
long long Calc(int x, int len) {
  long long res = 0;
  for (int i = (0), i_END_ = (len - 1); i <= i_END_; ++i) {
    if (x & (1 << i)) {
      if (C[i] > 18) return -1;
      res += Fac[C[i]];
    } else
      res += C[i];
  }
  return res;
}
int main() {
  Fac[0] = 1;
  for (int i = (1), i_END_ = (18); i <= i_END_; ++i) Fac[i] = Fac[i - 1] * i;
  for (int i = (1), i_END_ = ((1 << 13) - 1); i <= i_END_; ++i)
    Cnt[i] = Cnt[i >> 1] + (i & 1);
  scanf("%d%d%lld", &n, &K, &S);
  for (int i = (0), i_END_ = (n - 1); i <= i_END_; ++i) Rd(A[i]);
  int len = n >> 1;
  for (int i = (0), i_END_ = ((1 << len) - 1); i <= i_END_; ++i) {
    int cnt = 0;
    for (int j = (0), i_END_ = (len - 1); j <= i_END_; ++j)
      if (i & (1 << j)) {
        C[cnt++] = A[j];
      }
    for (int j = (0), i_END_ = ((1 << cnt) - 1); j <= i_END_; ++j)
      if (Cnt[j] <= K) {
        long long res = Calc(j, cnt);
        if (res <= S) mp[Cnt[j]][res]++;
      }
  }
  long long ans = 0;
  for (int i = (0), i_END_ = ((1 << (n - len)) - 1); i <= i_END_; ++i) {
    int cnt = 0;
    for (int j = (0), i_END_ = (n - len - 1); j <= i_END_; ++j)
      if (i & (1 << j)) C[cnt++] = A[j + len];
    for (int j = (0), i_END_ = ((1 << cnt) - 1); j <= i_END_; ++j)
      if (Cnt[j] <= K) {
        long long res = Calc(j, cnt);
        if (res <= S) {
          for (int k = (0), i_END_ = (min(len, K - Cnt[j])); k <= i_END_; ++k)
            if (mp[k].find(S - res) != mp[k].end()) {
              ans += mp[k][S - res];
            }
        }
      }
  }
  printf("%lld\n", ans);
  return 0;
}
