#include <bits/stdc++.h>
using namespace std;
long long n, k, s;
long long ff, ss;
long long a1[20];
long long a2[20];
long long inf = 1e17;
long long W[30];
map<long long, long long> lf[30];
map<long long, long long> pp;
long long sol = 0;
void solve(long long mk, long long hh, long long t, long long curk) {
  if (t == 0) {
    long long tot = 0;
    for (long long i = 0; i < ff; i++) {
      if ((mk >> i) % 2 == 1) {
        if ((hh >> i) % 2 == 1) {
          if (a1[i] < 30 && W[a1[i]] != 0)
            tot += W[a1[i]];
          else {
            tot = inf;
            break;
          }
        } else {
          tot += a1[i];
        }
      }
    }
    if (tot <= s) {
      lf[curk][tot]++;
      pp[tot] = 1;
    }
  } else {
    long long tot = 0;
    for (long long i = 0; i < ss; i++) {
      if ((mk >> i) % 2 == 1) {
        if ((hh >> i) % 2 == 1) {
          if (a2[i] < 30 && W[a2[i]] != 0)
            tot += W[a2[i]];
          else {
            tot = inf;
            break;
          }
        } else {
          tot += a2[i];
        }
      }
    }
    if (tot <= s) {
      long long v = s - tot;
      long long xx = k - curk;
      if (pp[v] > 0) {
        for (int i = 0; i <= xx; i++) {
          sol += lf[i][v];
        }
      }
    }
  }
}
void setam(long long i, long long mk, long long hh, long long t,
           long long curk) {
  if ((t == 0 && i == ff) || (t == 1 && i == ss)) {
    solve(mk, hh, t, curk);
    return;
  }
  if ((mk >> i) % 2 == 1) {
    long long nhh = ((1LL << i) | hh);
    if (curk < k) setam(i + 1, mk, nhh, t, curk + 1);
    setam(i + 1, mk, hh, t, curk);
  } else
    setam(i + 1, mk, hh, t, curk);
}
void setused(long long i, long long mk, long long t) {
  if ((t == 0 && i == ff) || (t == 1 && i == ss)) {
    setam(0, mk, 0, t, 0);
    return;
  }
  long long nmk = ((1LL << i) | mk);
  setused(i + 1, nmk, t);
  setused(i + 1, mk, t);
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> k >> s;
  ff = n / 2;
  ss = n - ff;
  W[0] = 1;
  for (long long i = 1; i < 30; i++) {
    W[i] = W[i - 1] * i;
    if (W[i] > s) {
      break;
    }
  }
  for (int i = 0; i < ff; i++) {
    cin >> a1[i];
  }
  for (int i = 0; i < ss; i++) {
    cin >> a2[i];
  }
  setused(0, 0, 0);
  setused(0, 0, 1);
  cout << sol << endl;
  return 0;
}
