#include <bits/stdc++.h>
using namespace std;
char buf[1 << 15], *p1 = buf, *p2 = buf;
inline long long read() {
  char ch;
  bool flag = 0;
  long long res;
  while (!isdigit(
      ch = (p1 == p2 &&
                    (p2 = (p1 = buf) + fread(buf, 1, 1 << 15, stdin), p1 == p2)
                ? EOF
                : *p1++)))
    (ch == '-') && (flag = true);
  for (res = ch - '0'; isdigit(
           ch = (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 15, stdin),
                             p1 == p2)
                     ? EOF
                     : *p1++));
       res = res * 10ll + ch - '0')
    ;
  (flag) && (res = -res);
  return res;
}
inline void write(long long x) {
  if (x < 0) x = ~x + 1ll, putchar('-');
  if (x > 9) write(x / 10ll);
  putchar(x % 10ll + '0');
}
unordered_map<long long, long long> mp[26];
int n, K, K1;
long long ans = 0;
long long S;
long long fac[50];
long long a[50];
void dfs(int x, int mx, int k, long long s, int t) {
  if (k > K1 || s > S) return;
  if (x == mx + 1) {
    if (t == 1)
      mp[k][s]++;
    else
      for (register int i = (0); i <= (K - k); i++) ans += mp[i][S - s];
    return;
  }
  if (a[x] < 20) dfs(x + 1, mx, k + 1, s + fac[x], t);
  dfs(x + 1, mx, k, s, t);
  dfs(x + 1, mx, k, s + a[x], t);
}
void solve() {
  n = read();
  K = read(), S = read();
  for (register int i = (1); i <= (n); i++) a[i] = read();
  for (register int i = (1); i <= (n); i++) {
    if (a[i] >= 20) continue;
    fac[i] = 1;
    for (long long j = 1; j <= a[i]; j++) fac[i] = fac[i] * j;
  }
  K1 = K;
  dfs(1, n / 2, 0, 0, 1);
  dfs(n / 2 + 1, n, 0, 0, -1);
  cout << ans;
}
int main() { solve(); }
