#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
template <class T>
bool scanff(T &ret) {
  char c;
  int sgn;
  T bit = 0.1;
  if (c = getchar(), c == EOF) return 0;
  while (c != '-' && c != '.' && (c < '0' || c > '9')) c = getchar();
  sgn = (c == '-') ? -1 : 1;
  ret = (c == '-') ? 0 : (c - '0');
  while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + (c - '0');
  if (c == ' ' || c == '\n') {
    ret *= sgn;
    return 1;
  }
  while (c = getchar(), c >= '0' && c <= '9') ret += (c - '0') * bit, bit /= 10;
  ret *= sgn;
  return 1;
}
using namespace std;
long long dp[55][55][55];
int a[55];
int n, sum;
double ans;
int main() {
  ans = 0.0;
  scanff(n);
  int tot = 0;
  for (int i = int(1); i <= int(n); i++) scanff(a[i]), tot += a[i];
  scanff(sum);
  if (tot <= sum) {
    printf("%.10f\n", n * 1.0);
    return 0;
  }
  for (int c = int(1); c <= int(n); c++) {
    memset(dp, 0, sizeof(dp));
    dp[0][0][0] = 1;
    for (int i = int(1); i <= int(n); i++) {
      for (int j = int(0); j <= int(i - 1); j++)
        for (int k = int(0); k <= int(sum); k++) {
          if (dp[i - 1][j][k]) {
            dp[i][j][k] += dp[i - 1][j][k];
            if (i != c && k + a[i] <= sum)
              dp[i][j + 1][k + a[i]] += dp[i - 1][j][k];
          }
        }
    }
    for (int j = int(1); j <= int(n); j++) {
      for (int k = int(max(0, sum - a[c] + 1)); k <= int(50); k++) {
        if (dp[n][j][k]) {
          double temp = dp[n][j][k] * j;
          int num = n - j;
          int n1 = n - j, n2 = n;
          for (int l = int(1); l <= int(num); l++) {
            temp *= double(n1);
            temp /= double(n2);
            n1--;
            n2--;
          }
          temp /= double(n - j);
          ans += temp;
        }
      }
    }
  }
  printf("%.10f\n", ans);
  return 0;
}
