#include <bits/stdc++.h>
using namespace std;
complex<double> poly1[300300], poly2[300300], val[300300], result[300300];
void fft(int deg, complex<double> *rd, complex<double> *wr, int step, int w) {
  if (deg == 1) {
    *wr = *rd;
    return;
  }
  fft(deg / 2, rd, wr, 2 * step, w);
  fft(deg / 2, rd + step, wr + deg / 2, 2 * step, w);
  complex<double> omega = 1,
                  omega_n = exp(complex<double>(0, w * 2 * acos(-1) / deg));
  for (int i = 0; i < deg / 2; ++i) {
    complex<double> x = wr[i], y = wr[i + deg / 2];
    wr[i] = x + omega * y;
    wr[i + deg / 2] = x - omega * y;
    omega = omega * omega_n;
  }
}
int mul(int d1, int d2) {
  int d = d1 + d2;
  while (d & (d - 1)) d++;
  for (int i = d1; i < d; ++i) poly1[i] = complex<double>(0, 0);
  for (int i = d2; i < d; ++i) poly2[i] = complex<double>(0, 0);
  fft(d, poly1, val, 1, 1);
  fft(d, poly2, result, 1, 1);
  for (int i = 0; i < d; ++i) val[i] *= result[i];
  fft(d, val, result, 1, -1);
  for (int i = 0; i < d; ++i) result[i] /= complex<double>(d, 0);
  return d;
}
vector<long double> _fft(vector<long double> a, vector<long double> b) {
  int dg = 1 + max(a.size(), b.size());
  for (int i = 0; i <= dg; i++) {
    if (a.size() > i)
      poly1[i] = complex<double>(a[i], 0);
    else
      poly1[i] = complex<double>(0, 0);
    if (b.size() > i)
      poly2[i] = complex<double>(b[i], 0);
    else
      poly2[i] = complex<double>(0, 0);
  }
  mul(dg, dg);
  vector<long double> ret;
  for (int i = 0; i < 2 * dg; i++) ret.push_back(result[i].real());
  return ret;
}
int rrank[300300];
vector<long double> poly[300300];
vector<long double> eval(int a, int b) {
  if (a == b) return poly[a];
  int mid = (a + b) / 2;
  vector<long double> p1 = eval(a, mid);
  vector<long double> p2 = eval(mid + 1, b);
  return _fft(p1, p2);
}
int main() {
  int n, caras, sum = 0;
  scanf("%d%d", &n, &caras);
  for (int i = 0; i < n; i++) scanf("%d", rrank + i), sum += rrank[i];
  for (int i = 0; i < n; i++) {
    poly[i].push_back(0.0);
    for (int j = 1; j <= caras; j++) {
      if (rrank[i] == j)
        poly[i].push_back(0.0);
      else
        poly[i].push_back(1.0 / (caras - 1));
    }
  }
  vector<long double> r = eval(0, n - 1);
  long double p = 0;
  for (int i = 0; i < sum; i++) p += r[i];
  printf("%.10lf\n", (double)p * (caras - 1) + 1);
}
