#include <bits/stdc++.h>
using namespace std;
int a[55];
int n, p;
long long dp[55][55][55];
long long get(int i, int c, int s, int r, int j) {
  if (s > p) return 0;
  if (i > n) return (s <= p && s + a[j] > p && c == r ? 1 : 0);
  if (dp[i][c][s] != -1) return dp[i][c][s];
  long long sum = 0;
  sum += get(i + 1, c, s, r, j);
  if (i != j) sum += get(i + 1, c + 1, s + a[i], r, j);
  return dp[i][c][s] = sum;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  scanf("%d", &p);
  int sum = 0;
  for (int i = 1; i <= n; i++) sum += a[i];
  long double ans = 0.0;
  if (sum <= p) {
    cout << fixed << setprecision(10) << (long double)n << endl;
    return 0;
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      memset(dp, -1, sizeof dp);
      long long e = get(1, 0, 0, i - 1, j);
      long double c = 1.0;
      for (int k = 1; k <= n; k++) {
        long double f = 1.0;
        long double s = 1.0;
        if (k <= i - 1) f *= (long double)k;
        if (k <= n - i) s *= (long double)k;
        c = c * f * s / (long double)k;
      }
      ans += c * (long double)(i - 1) * (long double)e;
    }
  cout << fixed << setprecision(10) << ans << endl;
}
