#include <bits/stdc++.h>
using namespace std;
int n, p;
long long mem[60][60][60];
long long c[60][60];
double divi[60];
int a[60];
int chose;
long long solve(int cur, int cnt, int val) {
  if (cur == n) {
    return val == 0 && cnt == 0 ? 1 : 0;
  }
  long long &res = mem[cur][cnt][val];
  if (res != -1) return res;
  res = solve(cur + 1, cnt, val);
  if (cur != chose && a[cur] <= val && cnt) {
    res += solve(cur + 1, cnt - 1, val - a[cur]);
  }
  return res;
}
int main() {
  for (int i = 0; i < 60; i++) {
    for (int j = 0; j <= i; j++) {
      if (j == 0 || j == i)
        c[i][j] = 1;
      else
        c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
    }
  }
  cin >> n;
  int sum = 0;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    sum += a[i];
  }
  cin >> p;
  if (sum <= p) {
    cout << n << endl;
    return 0;
  }
  for (int k = 1; k < n; k++) {
    divi[k] = (double)k / (double)(k + 1);
    for (int i = 1; i <= n - k - 1; i++) {
      divi[k] *= i;
      divi[k] /= (double)(k + i + 1);
    }
  }
  double res = 0.;
  for (int i = 0; i < n; i++) {
    chose = i;
    memset(mem, -1, sizeof mem);
    for (int k = 1; k < n; k++) {
      long long me = 0;
      for (int j = max(0, p - a[i] + 1); j <= p; j++) {
        me += solve(0, k, j);
      }
      res += (double)me * divi[k];
    }
  }
  cout.setf(ios::fixed | ios::showpoint);
  cout.precision(8);
  cout << res << endl;
  return 0;
}
