#include <bits/stdc++.h>
using namespace std;
int get() {
  char ch;
  while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-')
    ;
  if (ch == '-') {
    int s = 0;
    while (ch = getchar(), ch >= '0' && ch <= '9') s = s * 10 + ch - '0';
    return -s;
  }
  int s = ch - '0';
  while (ch = getchar(), ch >= '0' && ch <= '9') s = s * 10 + ch - '0';
  return s;
}
const int N = 1e4 + 5;
int n;
double c, p[N];
double f[2][N], g[2][N], ans[2][N], Ans[2][N];
double js[N];
double choose(int n, int m) { return n < m ? 0 : js[n] / js[m] / js[n - m]; }
int main() {
  n = get();
  c = (double)get() / 1e6;
  for (int i = 0; i <= n; i++) {
    p[i] = (double)get() / 1e6;
  }
  for (int i = 0; i <= n - 1; i++) {
    int j = n - 1 - i;
    g[0][i] = p[i] * (n - i) / n + p[i + 1] * (i + 1) / n;
    if (g[0][i] > 0)
      ans[0][i] = max((double)0, -c + p[i + 1] * (i + 1) / n / g[0][i]);
  }
  int o = 0;
  for (int s = n - 2; s >= 0; s--) {
    int t = o ^ 1;
    for (int i = 0; i <= s; i++) {
      int j = s - i;
      double v0 = g[o][i + 1] * (i + 1) / (s + 1),
             v1 = g[o][i] * (j + 1) / (s + 1);
      g[t][i] = v0 + v1;
      ans[t][i] =
          max((double)0,
              v0 + v1 > 0
                  ? -c + (v0 * (ans[o][i + 1] + 1) + v1 * ans[o][i]) / (v0 + v1)
                  : 0);
    }
    ans[0][s + 1] = ans[1][s + 1] = 0;
    swap(o, t);
  }
  printf("%.12lf\n", ans[o][0]);
  return 0;
}
