#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
const int inf = (int)1e9;
const int MAX_N = 200 * 1000 + 1000;
const int REM = inf + 9;
int n, p;
int arr[111];
long long dp[51][51][51][51];
bool visit[51][51][51][51];
long long rec(int block, int inside, int idx, int rem) {
  if (rem < 0) return 0;
  if (inside == 0) {
    if (rem < arr[block])
      return 1;
    else
      return 0;
  }
  if (idx == n) return 0;
  if (idx == block) return rec(block, inside, idx + 1, rem);
  long long &ref = dp[block][inside][idx][rem];
  if (visit[block][inside][idx][rem]) return ref;
  visit[block][inside][idx][rem] = 1;
  ref = 0;
  ref += rec(block, inside - 1, idx + 1, rem - arr[idx]);
  ref += rec(block, inside, idx + 1, rem);
  return ref;
}
double f(long long x, long long inside, long long outside) {
  long long a = inside + 1;
  long long b = outside;
  double ret = x * inside;
  while (a <= n || b >= 1) {
    if (a <= n) {
      ret /= a;
      a++;
    }
    if (b >= 1) {
      ret *= b;
      b--;
    }
  }
  return ret;
}
int main() {
  cin >> n;
  int sum = 0;
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
    sum += arr[i];
  }
  cin >> p;
  if (sum <= p) {
    cout << n << endl;
    return 0;
  }
  double ans = 0;
  for (int i = 0; i < n; i++) {
    for (int inside = 0; inside < n; inside++) {
      long long x = rec(i, inside, 0, p);
      ans += f(x, inside, n - 1 - inside);
    }
  }
  printf("%.13f\n", ans);
  return 0;
}
