#include <bits/stdc++.h>
using namespace std;
const long long LL_MIN = std::numeric_limits<long long>::min();
const long long LL_MAX = std::numeric_limits<long long>::max();
template <class T, class R>
ostream& operator<<(ostream& o, const pair<T, R>& p) {
  o << "(" << p.first << ", " << p.second << ")";
  return o;
}
template <class T, class R>
istream& operator>>(istream& o, pair<T, R>& p) {
  o >> p.first >> p.second;
  return o;
}
template <class T>
string to_string(const T& x) {
  stringstream o;
  o << "[";
  for (__typeof((x).begin()) i = ((x).begin()); i != (x).end(); ++i) {
    o << ((i != x.begin()) ? ", " : "") << *i;
  }
  o << "]";
  string r;
  getline(o, r);
  return r;
}
template <class T>
T get_next(string& s) {
  stringstream ss(s);
  T r;
  ss >> r;
  getline(ss, s);
  return r;
}
template <class T>
void split_string(const string& s, vector<T>& o) {
  stringstream ss(s);
  o.clear();
  T x;
  while (ss >> x) {
    o.push_back(x);
  }
}
void trim(string& s) {
  stringstream ss;
  ss << s;
  s.clear();
  ss >> s;
}
template <class T, class R>
ostream& operator<<(ostream& o, const map<T, R>& x) {
  o << to_string(x);
  return o;
}
template <class T>
ostream& operator<<(ostream& o, const vector<T>& x) {
  o << to_string(x);
  return o;
};
template <class T>
ostream& operator<<(ostream& o, const set<T>& x) {
  o << to_string(x);
  return o;
};
template <class T>
ostream& operator<<(ostream& o, const deque<T>& x) {
  o << to_string(x);
  return o;
};
const long long INFL = 1000000000LL * 1000000000LL + 1000LL;
const int INF = 1000000000 + 1000;
const long long MOD = 1000000009;
long long dp[55][55][111];
int n, a[55], L;
long double sil[111];
long double dyn(vector<int> v, int len) {
  dp[0][0][0] = 1;
  long double res = 0;
  for (int i = 0; i < ((int)v.size()); ++i) {
    for (int j = 0; j < (i + 2); ++j) {
      for (int k = 0; k < (55); ++k) {
        dp[i + 1][j][k] = dp[i][j][k];
        if (v[i] <= k && j > 0) {
          dp[i + 1][j][k] += dp[i][j - 1][k - v[i]];
        }
        if (i == (int)v.size() - 1 && k >= len && k <= L) {
          int a = j;
          int b = n - a - 1;
          res += 1. * dp[i + 1][j][k] * sil[a] * sil[b] * a / sil[n];
        }
      }
    }
  }
  return res;
}
int main() {
  sil[0] = 1;
  for (int i = 1; i <= 52; ++i) {
    sil[i] = sil[i - 1] * i;
  }
  scanf("%d", &n);
  int sum = 0;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
    sum += a[i];
  }
  scanf("%d", &L);
  if (sum <= L) {
    printf("%d.0000\n", n);
    return 0;
  }
  double res = 0;
  for (int i = 1; i <= n; ++i) {
    vector<int> v;
    for (int j = 1; j <= n; ++j) {
      if (i != j) {
        v.push_back(a[j]);
      }
    }
    res += dyn(v, L - a[i] + 1);
  }
  printf("%.4lf\n", res);
}
