#include <bits/stdc++.h>
using namespace std;
unsigned long long* a;
unsigned long long s;
unsigned long long fact[19];
unsigned long long* msum;
unsigned long long per(int nach, int n, int k, unsigned long long s) {
  unsigned long long ans = 0;
  if (s == 0) {
    return 1;
  }
  if (msum[nach] < s) return 0;
  if (nach == n) return 0;
  if (nach < n - 2)
    if (a[nach] == a[nach + 1])
      if (a[nach + 2] == a[nach + 1])
        if (a[nach] != s)
          if (2 * a[nach] != s)
            if (a[nach] > 18 ||
                ((fact[a[nach]] != s) && (2 * fact[a[nach]] != s) &&
                 ((fact[a[nach]] + a[nach] != s)))) {
              ans += per(nach + 3, n, k, s);
              if (a[nach] <= s) ans += 3 * per(nach + 3, n, k, s - a[nach]);
              if (2 * a[nach] <= s)
                ans += 3 * per(nach + 3, n, k, s - 2 * a[nach]);
              if (3 * a[nach] <= s) ans += per(nach + 3, n, k, s - 3 * a[nach]);
              if ((k > 0) && (a[nach] <= 18)) {
                if (fact[a[nach]] <= s)
                  ans += 3 * per(nach + 3, n, k - 1, s - fact[a[nach]]);
                if (fact[a[nach]] + a[nach] <= s)
                  ans +=
                      6 * per(nach + 3, n, k - 1, s - fact[a[nach]] - a[nach]);
                if (fact[a[nach]] + 2 * a[nach] <= s)
                  ans += 3 * per(nach + 3, n, k - 1,
                                 s - fact[a[nach]] - 2 * a[nach]);
              }
              if ((k > 1) && (a[nach] <= 18)) {
                if (2 * fact[a[nach]] <= s)
                  ans += 3 * per(nach + 3, n, k - 2, s - 2 * fact[a[nach]]);
                if (2 * fact[a[nach]] + a[nach] <= s)
                  ans += 3 * per(nach + 3, n, k - 2,
                                 s - 2 * fact[a[nach]] - a[nach]);
              }
              if ((k > 2) && (a[nach] <= 18)) {
                if (3 * fact[a[nach]] <= s)
                  ans += per(nach + 3, n, k - 3, s - 3 * fact[a[nach]]);
              }
              return ans;
            }
  if (nach < n - 1)
    if (a[nach] == a[nach + 1])
      if (a[nach] != s)
        if (a[nach] > 18 || fact[a[nach]] != s) {
          ans += per(nach + 2, n, k, s);
          if (a[nach] <= s) ans += 2 * per(nach + 2, n, k, s - a[nach]);
          if (2 * a[nach] <= s) ans += per(nach + 2, n, k, s - 2 * a[nach]);
          if ((k > 0) && (a[nach] <= 18)) {
            if (fact[a[nach]] <= s)
              ans += 2 * per(nach + 2, n, k - 1, s - fact[a[nach]]);
            if (fact[a[nach]] + a[nach] <= s)
              ans += 2 * per(nach + 2, n, k - 1, s - fact[a[nach]] - a[nach]);
          }
          if ((k > 1) && (a[nach] <= 18))
            if (2 * fact[a[nach]] <= s)
              ans += per(nach + 2, n, k - 2, s - 2 * fact[a[nach]]);
          return ans;
        }
  ans += per(nach + 1, n, k, s);
  if (a[nach] <= s) ans += per(nach + 1, n, k, s - a[nach]);
  if (k > 0)
    if (a[nach] <= 18)
      if (fact[a[nach]] <= s) ans += per(nach + 1, n, k - 1, s - fact[a[nach]]);
  return ans;
}
bool myfunction(unsigned long long i, unsigned long long j) {
  unsigned long long mi, mj;
  mi = i;
  mj = j;
  if (mi > s) mi = 0;
  if (mj > s) mj = 0;
  if (mi <= 18)
    if (fact[mi] <= s) mi = fact[mi];
  if (mj <= 18)
    if (fact[mj] <= s) mj = fact[mj];
  return (mi > mj);
}
int main() {
  int k, n;
  fact[0] = 1;
  for (int i = 1; i <= 18; i++) fact[i] = fact[i - 1] * i;
  cin >> n >> k >> s;
  a = new unsigned long long[n];
  msum = new unsigned long long[n + 1];
  msum[n] = 0;
  for (int i = 0; i < n; i++) cin >> a[i];
  sort(a, a + n, myfunction);
  for (int i = n - 1; i >= 0; i--) {
    if (a[i] > s) {
      msum[i] = msum[i + 1];
      continue;
    }
    if (a[i] <= 18)
      if (fact[a[i]] <= s) {
        msum[i] = msum[i + 1] + fact[a[i]];
        continue;
      }
    msum[i] = msum[i + 1] + a[i];
  }
  cout << per(0, n, k, s) << endl;
}
