#include <bits/stdc++.h>
using namespace std;
const int NN = 55;
double frac[NN];
vector<int> len;
int n;
int p;
double dp[NN][NN][NN][NN];
double calc(int a) {
  double &res = frac[a];
  if (res > -.5) return res;
  res = 1.;
  int x = 1;
  for (int i = 1; i < a + 1; i++) {
    if (x <= n) {
      res /= x;
      x++;
    }
    res *= i;
  }
  for (int i = 1; i < n - a; i++) {
    if (x <= n) {
      res /= x;
      x++;
    }
    res *= i;
  }
  while (x <= n) res /= x, x++;
  return res;
}
double rec(int pos, int idx, int used, int sum) {
  if (pos == n) {
    return 0;
  }
  double &res = dp[pos][idx][used][sum];
  if (res > -.5) return res;
  res = 0;
  res = rec(pos + 1, idx, used, sum);
  if (pos != idx && sum + len[pos] <= p) {
    res += rec(pos + 1, idx, used + 1, sum + len[pos]) +
           (sum + len[pos] + len[idx] > p ? (used + 1) * calc(used + 1) : 0);
  }
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  scanf("%d", &n);
  len.clear();
  len.resize(n);
  for (int i = 0; i < n; i++) scanf("%d", &len[i]);
  scanf("%d", &p);
  int sum = accumulate(len.begin(), len.end(), 0);
  if (sum <= p) {
    printf("%.10f\n", (double)n);
  } else {
    memset(frac, -1., sizeof(frac));
    memset(dp, -1., sizeof(dp));
    double res = 0.;
    for (int i = 0; i < n; i++) {
      res += rec(0, i, 0, 0);
    }
    printf("%.10f\n", (double)res);
  }
}
