#include <bits/stdc++.h>
using namespace std;
long long a1[25], a2[25];
long long fact[25], sz1, sz2, ans = 0, k, s;
unordered_map<long long, int> m[26];
void perebor1(int kx, long long sum, int cur) {
  if (sum > s) {
    return;
  }
  if (cur == sz1) {
    m[kx][sum]++;
    return;
  }
  if (kx && a1[cur] < 20 && fact[a1[cur]] && sum + fact[a1[cur]] <= s) {
    perebor1(kx - 1, sum + fact[a1[cur]], cur + 1);
  }
  perebor1(kx, sum + a1[cur], cur + 1);
  perebor1(kx, sum, cur + 1);
}
void perebor2(int kx, long long sum, int cur) {
  if (sum > s) {
    return;
  }
  if (cur == sz2) {
    for (int i = k - kx; i <= k; i++) {
      ans += m[i][s - sum];
    }
    return;
  }
  if (kx && a2[cur] < 20 && fact[a2[cur]] && sum + fact[a2[cur]] <= s) {
    perebor2(kx - 1, sum + fact[a2[cur]], cur + 1);
  }
  perebor2(kx, sum + a2[cur], cur + 1);
  perebor2(kx, sum, cur + 1);
}
int main() {
  long long n;
  cin >> n >> k >> s;
  sz1 = n / 2;
  sz2 = n - sz1;
  for (int i = 0; i < sz1; i++) {
    cin >> a1[i];
  }
  for (int i = 0; i < sz2; i++) {
    cin >> a2[i];
  }
  fact[0] = 1;
  bool f = true;
  for (long long i = 1; i < 25; i++) {
    if (f) {
      if (fact[i - 1] * i <= s) {
        fact[i] = fact[i - 1] * i;
      } else {
        f = false;
      }
    } else {
      fact[i] = 0;
    }
  }
  perebor1(k, 0, 0);
  perebor2(k, 0, 0);
  cout << ans;
  return 0;
}
