#include <bits/stdc++.h>
using namespace std;
long long Fact[20];
int main() {
  ios_base::sync_with_stdio(false);
  Fact[0] = 1;
  for (int i = 1; i < 20; i++) Fact[i] = Fact[i - 1] * i;
  int n, k, num;
  vector<int> A, B;
  long long s;
  cin >> n >> k >> s;
  for (int i = 0; i < n; i++) {
    cin >> num;
    if (i < n / 2)
      A.push_back(num);
    else
      B.push_back(num);
  }
  map<long long, vector<int> > All;
  for (int i = 0; i < (1 << A.size()); i++) {
    for (int Q = i; Q > 0; Q = (Q - 1) & i) {
      long long sum = 0;
      int KK = 0;
      bool f = 1;
      for (int j = 0; j < A.size(); j++) {
        int y = (1 << j) & i;
        int r = (1 << j) & Q;
        if (y) {
          if (r) {
            if (A[j] > 18) {
              f = 0;
              break;
            }
            sum += Fact[A[j]], KK++;
          } else
            sum += A[j];
        }
        if (KK > k || sum > s) {
          f = 0;
          break;
        }
      }
      if (f) All[sum].push_back(KK);
    }
    long long sum = 0;
    for (int j = 0; j < A.size(); j++) {
      int f = (1 << j) & i;
      if (f) sum += A[j];
    }
    All[sum].push_back(0);
  }
  for (map<long long, vector<int> >::iterator it = All.begin(); it != All.end();
       it++) {
    vector<int> l = it->second;
    sort(l.begin(), l.end());
    All[it->first] = l;
  }
  swap(A, B);
  long long res = 0;
  for (int i = 0; i < (1 << A.size()); i++) {
    for (int Q = i; Q > 0; Q = (Q - 1) & i) {
      long long sum = 0;
      int KK = 0;
      bool f = 1;
      for (int j = 0; j < A.size(); j++) {
        int y = (1 << j) & i;
        int r = (1 << j) & Q;
        if (y) {
          if (r) {
            if (A[j] > 18) {
              f = 0;
              break;
            }
            sum += Fact[A[j]], KK++;
          } else
            sum += A[j];
        }
        if (KK > k || sum > s) {
          f = 0;
          break;
        }
      }
      if (f && s >= sum && All[s - sum].size() > 0) {
        vector<int>::iterator it =
            upper_bound(All[s - sum].begin(), All[s - sum].end(), k - KK);
        it--;
        if (All[s - sum][0] <= k - KK)
          res += (int)(it - All[s - sum].begin()) + 1;
      }
    }
    long long sum = 0;
    for (int j = 0; j < A.size(); j++) {
      int y = (1 << j) & i;
      if (y) sum += A[j];
    }
    if (s >= sum && All[s - sum].size() > 0) {
      vector<int>::iterator it =
          upper_bound(All[s - sum].begin(), All[s - sum].end(), k);
      it--;
      if (All[s - sum][0] <= k) res += (int)(it - All[s - sum].begin()) + 1;
    }
  }
  cout << res << endl;
}
