#include <bits/stdc++.h>
using namespace std;
const long long N = 31;
map<long long, long long> f[N];
long long n, m, k, s, ans, a[N], jc[N];
inline long long read() {
  long long x = 0, f = 1;
  char c = getchar();
  for (; c < '0' || c > '9'; c = getchar())
    if (c == '-') f = -1;
  for (; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + c - 48;
  return x * f;
}
inline void dfs1(long long now, long long end, long long sum, long long num) {
  if (num > k) return;
  if (now > end) {
    f[num][sum]++;
    return;
  }
  dfs1(now + 1, end, sum + a[now], num);
  dfs1(now + 1, end, sum, num);
  if (a[now] <= 20) dfs1(now + 1, end, sum + jc[a[now]], num + 1);
}
inline void dfs2(long long now, long long end, long long sum, long long num) {
  if (num > k) return;
  if (sum > s) return;
  if (now > end) {
    for (register long long i = 0; i <= k - num; i++) ans += f[i][s - sum];
    return;
  }
  dfs2(now + 1, end, sum + a[now], num);
  dfs2(now + 1, end, sum, num);
  if (a[now] <= 20) dfs2(now + 1, end, sum + jc[a[now]], num + 1);
}
signed main() {
  n = read(), k = read(), s = read();
  jc[1] = jc[0] = 1;
  for (register long long i = 2; i <= 20; i++) jc[i] = jc[i - 1] * i;
  for (register long long i = 1; i <= n; i++) a[i] = read();
  dfs1(1, (n + 1) / 2, 0, 0);
  dfs2((n + 1) / 2 + 1, n, 0, 0);
  printf("%lld", ans);
  return 0;
}
