#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 25 + 2, MXFB = 18 + 1;
long long n, ss, k, a[MAXN], s[2], tp[MXFB], f[MXFB], ans;
map<long long, long long> t[MAXN];
int32_t main() {
  cin >> n >> k >> ss;
  for (long long i = 0; i < n; i++) cin >> a[i];
  s[0] = n >> 1;
  s[1] = n - s[0];
  f[0] = tp[0] = 1;
  for (long long i = 1; i < MXFB; i++) {
    f[i] = f[i - 1] * i;
    tp[i] = tp[i - 1] * 3;
  }
  for (long long i = 0; i < tp[s[0]]; i++) {
    long long j = 0, jam = 0, xx = 0, cpy = i;
    bool bn = false;
    while (i) {
      xx += (i % 3 == 2);
      if (xx > k || (i % 3 == 2 && (a[j] >= MXFB || jam + f[a[j]] > ss)) ||
          (i % 3 == 1 && jam + a[j] > ss)) {
        bn = true;
        break;
      }
      jam += (i % 3 == 1 ? a[j] : (i % 3 == 2 ? f[a[j]] : 0));
      j++;
      i /= 3;
    }
    if (!bn)
      for (long long i = xx; i <= k; i++) t[i][jam]++;
    i = cpy;
  }
  for (long long i = 0; i < tp[s[1]]; i++) {
    long long j = s[0], jam = 0, cpy = i, xx = 0;
    bool bn = false;
    while (i) {
      xx += (i % 3 == 2);
      if (xx > k || (i % 3 == 2 && (a[j] >= MXFB || jam + f[a[j]] > ss)) ||
          (i % 3 == 1 && jam + a[j] > ss)) {
        bn = true;
        break;
      }
      jam += (i % 3 == 1 ? a[j] : (i % 3 == 2 ? f[a[j]] : 0));
      j++;
      i /= 3;
    }
    if (!bn) ans += t[k - xx][ss - jam];
    i = cpy;
  }
  cout << ans;
  return 0;
}
