#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3f3f3f3f;
const int MO = 1e9 + 7;
const int MAXN = 105;
const int MAXM = 1005;
template <class T>
inline bool Chkmin(T &x, T y) {
  return x > y ? x = y, true : false;
}
template <class T>
inline bool Chkmax(T &x, T y) {
  return x < y ? x = y, true : false;
}
template <class T>
inline T read(T &x) {
  static int f;
  static char c;
  for (f = 1; !isdigit(c = getchar());)
    if (c == '-') f = -1;
  for (x = 0; isdigit(c); c = getchar()) x = x * 10 + c - 48;
  return x *= f;
}
template <class T>
inline void write(T x, char P = '\n') {
  static char s[20];
  static int top = 0;
  if (x < 0) x = -x, putchar('-');
  do {
    s[++top] = x % 10;
  } while (x /= 10);
  do {
    putchar(s[top] + 48);
  } while (--top);
  putchar(P);
}
inline void open() {
  freopen(".in", "r", stdin);
  freopen(".out", "w", stdout);
}
int N, M, sum;
int a[MAXN];
double s[2][MAXN * MAXM];
int main() {
  read(N), read(M);
  if (M == 1) write(1), exit(0);
  for (int i = 1; i <= N; ++i) {
    sum += read(a[i]);
  }
  for (int i = 0; i < sum; ++i) {
    s[0][i] = M - 1;
  }
  for (int i = 1, p = 1; i <= N; ++i, p ^= 1) {
    s[p][0] = 0;
    for (int j = 1; j < sum; ++j) {
      s[p][j] = s[p][j - 1] +
                (s[p ^ 1][j - 1] - (j > M ? s[p ^ 1][j - M - 1] : 0) -
                 (j >= a[i] ? s[p ^ 1][j - a[i]] -
                                  (j > a[i] ? s[p ^ 1][j - a[i] - 1] : 0)
                            : 0)) /
                    (double)(M - 1);
    }
  }
  printf("%.15lf\n", s[N & 1][sum - 1] + 1);
}
