#include <bits/stdc++.h>
using namespace std;
long long n, arr[26], s, k, fuck[19], ans;
vector<pair<long long, long long> > v1;
map<pair<long long, long long>, long long> maph;
void rek(long long x, long long r, long long z, long long o, bool p) {
  if (x >= r) {
    if (!p)
      v1.push_back({z, o});
    else
      maph[{z, o}]++;
    return;
  }
  if (arr[x] + z <= s) rek(x + 1, r, z + arr[x], o, p);
  if (o < k and arr[x] <= 18 and z + fuck[arr[x]] <= s)
    rek(x + 1, r, z + fuck[arr[x]], o + 1, p);
  rek(x + 1, r, z, o, p);
}
int main() {
  cin >> n >> k >> s;
  fuck[0] = 1;
  for (int i = 1; i <= 18; i++) fuck[i] = fuck[i - 1] * i;
  for (int i = 0; i < n; i++) cin >> arr[i];
  rek(0, n / 2, 0, 0, 0), rek(n / 2, n, 0, 0, 1);
  for (int i = 0; i < v1.size(); i++) {
    for (int j = 0; j <= k - v1[i].second; j++) {
      if (maph.find({s - v1[i].first, j}) != maph.end())
        ans += maph[{s - v1[i].first, j}];
    }
  }
  cout << ans;
}
