#include <bits/stdc++.h>
using namespace std;
int dx[] = {0, 1, 0, -1, 1, 1, -1, -1};
int dy[] = {1, 0, -1, 0, 1, -1, 1, -1};
void fast() {
  std::ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
}
long long fact[20];
int main() {
  fast();
  int n, k;
  long long s, x;
  fact[1] = 1;
  for (long long i = 2; i <= 19; i++) {
    fact[i] = fact[i - 1] * i;
  }
  cin >> n >> k >> s;
  vector<long long> v1, v2;
  for (int i = 0; i < n; i++) {
    cin >> x;
    if (i < n / 2)
      v1.push_back(x);
    else
      v2.push_back(x);
  }
  vector<pair<long long, int>> v3, v4;
  for (int i = 1; i < (1 << v1.size()); i++) {
    vector<long long> v;
    int m = i;
    for (int j = 0; j < v1.size(); j++) {
      if (m & 1) v.push_back(v1[j]);
      m >>= 1;
    }
    for (int a = 0; a < (1 << v.size()); a++) {
      m = a;
      int cnt = 0;
      long long sum = 0;
      int c = 0;
      for (int j = 0; j < v.size(); j++) {
        if (m & 1) c++;
        if (m & 1 && v[j] <= 19) {
          cnt++;
          sum += fact[v[j]];
        } else
          sum += v[j];
        m >>= 1;
      }
      if (c == cnt) v3.push_back({sum, cnt});
    }
  }
  for (int i = 1; i < (1 << v2.size()); i++) {
    vector<long long> v;
    int m = i;
    for (int j = 0; j < v2.size(); j++) {
      if (m & 1) v.push_back(v2[j]);
      m >>= 1;
    }
    for (int a = 0; a < (1 << v.size()); a++) {
      m = a;
      int cnt = 0;
      long long sum = 0;
      int c = 0;
      for (int j = 0; j < v.size(); j++) {
        if (m & 1) c++;
        if (m & 1 && v[j] <= 19) {
          cnt++;
          sum += fact[v[j]];
        } else
          sum += v[j];
        m >>= 1;
      }
      if (c == cnt) v4.push_back({sum, cnt});
    }
  }
  sort(v4.begin(), v4.end());
  long long res = 0;
  for (auto b : v3) {
    if (b.first == s && b.second <= k) res++;
  }
  for (auto b : v4) {
    if (b.first == s && b.second <= k) res++;
  }
  for (auto b : v3) {
    int idx1 = lower_bound(v4.begin(), v4.end(), make_pair(s - b.first, 0)) -
               v4.begin();
    if (idx1 == v4.size() || v4[idx1].first + b.first != s ||
        v4[idx1].second + b.second > k)
      continue;
    int idx2 = upper_bound(v4.begin(), v4.end(),
                           make_pair(s - b.first, k - b.second)) -
               v4.begin();
    idx2--;
    if (idx2 < 0) continue;
    if (v4[idx2].first + b.first != s || v4[idx2].second + b.second > k)
      continue;
    res += idx2 - idx1 + 1;
  }
  cout << res << "\n";
}
