#include <bits/stdc++.h>
using namespace std;

int n, m, k;
vector<long long> a, nxt;

long double solve();
bool check(long double e);

int main() {
  cin >> n >> m >> k;
  a.resize(k);
  for (auto &p : a) cin >> p;
  cout << fixed << setprecision(10);
  auto res = solve();
  if (res < 0)
    cout << "-1" << endl;
  else
    cout << solve() << endl;
  return 0;
}

long double solve() {
  nxt.resize(n + m + 1);
  for (int i = 0; i < n + m + 1; ++i) {
    nxt[i] = i + m;
    for (int j = 0; j < k; ++j)
      if (i <= a[j]) nxt[i] = min(nxt[i], a[j]);
  }
  for (int i = 0; i < k;) {
    int now = a[i], cnt = 0;
    while (i < k && now == a[i]) ++i, ++now, ++cnt;
    if (cnt >= m) return -1;
  }
  long double l = 0, r = 1e18;
  for (int t = 0; t < 200; ++t) {
    long double mid = (l + r) / 2;
    if (check(mid))
      r = mid;
    else
      l = mid;
  }
  return r;
}

bool check(long double e) {
  vector<long double> dp(n + m, 0);
  long double now = 0;
  for (int i = n - 1; i >= 0; --i) {
    if (nxt[i] == i)
      dp[i] = e;
    else
      dp[i] = 1 + now / m;
    now += dp[i];
    now -= dp[i + m];
  }
  return dp[0] <= e;
}
#include <bits/stdc++.h>
#include <variant>

#define rep2(i,k,n) for(i64 i=(i64)(k);i<(i64)(n);i++)
#define rep(i,n) rep2(i,0,n)
#define all(x) begin(x),end(x)
#ifdef ENV_LOCAL
#define dump if (1) cerr
#else
#define dump if (0) cerr
#endif

using namespace std;
using namespace std::string_literals;

using i32 = int32_t;
using i64 = int64_t;
using f64 = double;
using f80 = long double;
using vi32 = vector<i32>;
using vi64 = vector<i64>;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  i64 n,m,k;
  cin>>n>>m>>k;
  vi64 a(k);
  rep(i,k) cin>>a[i];
  vector<f64> c0(n+1);
  vector<f64> c1(n+1);
  rep(i,k) c1[a[i]] = 1.0;
  f64 s0 = 0;
  f64 s1 = 0;
  rep(ri,n) {
    i64 i = n - 1 - ri;
    s0 += c0[i+1];
    s1 += c1[i+1];
    if (ri >= m) {
      s0 -= c0[i+m+1];
      s1 -= c1[i+m+1];
    }
    if (c1[i] == 1.0) continue;
    else {
      c0[i] = s0 / m + 1.0;
      c1[i] = s1 / m;
    }
  }
  if (abs(1.0 - c1[0]) < 1e-8) {
    cout<<-1<<endl;
  } else {
    cout<<fixed<<setprecision(10)<<c0[0] / (1.0 - c1[0])<<endl;
  }
  return 0;
}
