#include <bits/stdc++.h>
#pragma comment(linker, "/stack:102400000,102400000")
using namespace std;
int lowbit(int x) { return (x & -x); }
template <class T_>
T_ f_abs(T_ x) {
  return x < 0 ? -x : x;
}
template <class T_>
T_ f_max(T_ a, T_ b) {
  return a > b ? a : b;
}
template <class T_>
T_ f_min(T_ a, T_ b) {
  return a < b ? a : b;
}
template <class T_>
T_ gcd(T_ a, T_ b) {
  while (T_ t = a % b) a = b, b = t;
  return b;
}
template <class T_>
void f_swap(T_ &a, T_ &b) {
  T_ t = a;
  a = b;
  b = t;
}
const double eps = 1e-9;
const int dx[] = {-1, 1, 0, 0, -1, -1, 1, 1},
          dy[] = {0, 0, -1, 1, -1, 1, -1, 1};
const int inf = 0x7fffffff;
const int mod = 1000000007;
const int N = 27;
int n, m, k, a[N], bs[17];
long long ss, fac[20];
map<pair<long long, int>, int> mp;
void Init() {
  int i;
  mp.clear();
  fac[0] = fac[1] = 1;
  for (i = 2; i < 19; ++i) fac[i] = fac[i - 1] * i;
  bs[0] = 1;
  for (i = 1; i <= 14; ++i) bs[i] = bs[i - 1] * 3;
}
void GetData() {
  for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
}
void Solve() {
  int i, j, state, s, cnt, num;
  long long sum, ans = 0;
  bool flag;
  if (n == 25)
    m = 13;
  else
    m = n / 2;
  state = bs[m];
  for (i = 0; i < state; ++i) {
    flag = true;
    s = i;
    cnt = 0;
    sum = 0;
    for (j = 0; j < m; ++j) {
      num = s % 3;
      s /= 3;
      if (num == 2) {
        if (a[j] >= 19) {
          flag = false;
          break;
        }
        cnt++;
        sum += fac[a[j]];
      } else if (num == 1)
        sum += a[j];
      if (sum > ss || cnt > k) {
        flag = false;
        break;
      }
    }
    if (flag) mp[make_pair(sum, cnt)]++;
  }
  state = bs[n - m];
  for (i = 0; i < state; ++i) {
    flag = true;
    s = i;
    cnt = 0;
    sum = 0;
    for (j = 0; j < n - m; ++j) {
      num = s % 3;
      s /= 3;
      if (num == 2) {
        if (a[j + m] >= 19) {
          flag = false;
          break;
        }
        cnt++;
        sum += fac[a[j + m]];
      } else if (num == 1)
        sum += a[j + m];
      if (sum > ss || cnt > k) {
        flag = false;
        break;
      }
    }
    if (flag) {
      for (j = 0; j + cnt <= k; ++j) ans += mp[make_pair(ss - sum, j)];
    }
  }
  printf("%I64d\n", ans);
}
int main() {
  while (~scanf("%d%d%I64d", &n, &k, &ss)) {
    Init();
    GetData();
    Solve();
  }
  return 0;
}
