#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <utility>
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <limits>
#define rep(i,n) for(int i = 0; i < n; ++i)
#define rep1(i,n) for(int i = 1; i <= n; ++i)
using namespace std;
template<class T>bool chmax(T &a, const T &b) { if(a < b){ a = b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if(a > b){ a = b; return 1; } return 0; }
template<class T> inline int  sz(T &a) { return a.size(); }
using ll = long long; using ld = long double;
using pi = pair<int,int>; using pl = pair<ll,ll>;
using vi = vector<int>; using vvi = vector<vi>;
using vl = vector<ll>; using vvl = vector<vl>;
const int inf = numeric_limits<int>::max();
const ll infll = numeric_limits<ll>::max();
int main()
{
  int n,m,k; cin >> n >> m >> k;
  vi a(n+1, 0);
  rep(i,k) {
    int tmp; cin >> tmp;
    a[tmp] = 1;
  }

  vector<ld> x(n+1), y(n+1);
  vector<ld> sumx(n+1, 0), sumy(n+1, 0);
  int id = 0;
  for(int i = n-1; i >= 0; --i) { 
    if(a[i]) {
      x[i] = 1;
      y[i] = 0;
    }
    else {
      x[i] = ld(1)/ld(m) * (sumx[id] - sumx[max(0, id-m)]);
      y[i] = ld(1)/ld(m) * (sumy[id] - sumy[max(0, id-m)]) + 1;
    }
    sumx[id+1] = sumx[id] + x[i];
    sumy[id+1] = sumy[id] + y[i];
    id++;
  }
  if(x[0] == 1) cout << -1 << "\n";
  else {
    ld res = y[0] / (1. - x[0]);
    printf("%.4Lf\n", res);
  }

  return 0;
}

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

typedef long long ll;

int main() {
    ll N, M, K, A;
    cin >> N >> M >> K;
    vector<bool> start(N + 1, false);
    rep(i, K) {
        cin >> A;
        start[A] = true;
    }
    double L = 0, R = 1e20;
    vector<double> dp(N + 1 + M, 0);
    rep(i, 100) {
        double m = (L + R) / 2, s = 0;
        rep(j, N) {
            if (start[N - 1 - j]) {
                dp[N - 1 - j] = m;
            } else {
                dp[N - 1 - j] = 1 + s / M;
            }
            s += dp[N - 1 - j];
            if (j >= M - 1) s -= dp[N - 1 - j + M];
            //cout << "s=" << s << " ";
        }
        if (dp[0] > m) L = m;
        else R = m;
        //rep(i, N + 1) cout << dp[i] << " "; cout << "\n";
        //cout << L << " " << R << "\n";
    }
    if (dp[0] > 1e15) cout << "-1\n";
    else cout << fixed << setprecision(20) << dp[0] << "\n";
}