#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e4;
long double dpf[55];
void fact(int n) {
  dpf[0] = dpf[1] = 1;
  for (int i = 2; i <= n; ++i) {
    dpf[i] = i * dpf[i - 1];
  }
}
long double memo[55][55][55][55];
int P;
vector<int> SIZ;
int n;
long double rec(int cnt, int sum, int indx, int blocker) {
  if (cnt < 0) return 0;
  if (sum > P) return 0;
  if (indx == n) {
    if (sum > P) return 0;
    if (cnt == 0)
      if (sum + SIZ[blocker] > P) return 1;
    return 0;
  }
  long double &re = memo[cnt][sum][indx][blocker];
  if (re > -eps) return re;
  long double res = 0;
  res = rec(cnt, sum, indx + 1, blocker);
  if (indx != blocker) res += rec(cnt - 1, sum + SIZ[indx], indx + 1, blocker);
  return re = res;
}
int main() {
  memset(memo, -1, sizeof memo);
  fact(51);
  int a;
  cin >> n;
  int sm = 0;
  for (int i = 0; i < n; ++i) {
    cin >> a;
    sm += a;
    SIZ.push_back(a);
  }
  cin >> P;
  if (sm <= P) {
    cout << n << endl;
    return 0;
  }
  long double res = 0;
  long double dp;
  for (int blocker = 0; blocker < int((SIZ).size()); ++blocker) {
    for (int cnt = 1; cnt <= int((SIZ).size()); ++cnt) {
      dp = rec(cnt, 0, 0, blocker);
      if (dp == 0) continue;
      res += (cnt * dp * dpf[cnt]) * dpf[n - cnt - 1];
    }
  }
  cout << (long double)res / (long double)dpf[n] << endl;
  return 0;
}
