#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define fcout cout << fixed << setprecision(18)

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);

  ll N; cin >> N;
  double M; cin >> M;
  ll K; cin >> K;

  vector<ll> A(N + 10, 0);
  for (ll i = 0; i < K; i++) {
    ll X; cin >> X;
    A[X] = 1;
  }

  ll check = 0;
  for (ll i = 0; i < N + 1; i++) {
    if (A[i] == 1) check++;
    else check = 0;
    if (check >= M) {
      cout << -1 << '\n';
      return 0;
    }
  }

  double l = 0, r = 1e12;
  while (l + 0.00001 < r) {
    double m = (l + r) / 2.0;
    vector<double> E(N + M + 10, 0);

    double sum = 0;
    for (ll i = N - 1; i >= 0; i--) {
      sum += (E[i + 1] - E[i + M + 1]);
      if (A[i] == 1) {
        E[i] = m;
      } else {
        E[i] = 1.0 + sum / M;
      }
    }
    if (E[0] > m) {
      l = m;
    } else {
      r = m;
    }
  }
  
  fcout << l << '\n';
  return 0;
}
#include<bits/stdc++.h>
using namespace std;
struct vals{
    double val1;
    double val2;
    vals():val1(0.f),val2(0.f){};
    vals  operator +(const vals & b){
        vals tmp;
        tmp.val1 = b.val1 + val1;
        tmp.val2 = b.val2 + val2;
        return tmp;
    }
    vals  operator -(const vals & b){
        vals tmp;
        tmp.val1 = val1 - b.val1;
        tmp.val2 = val2 - b.val2;
        return tmp;
    }
    void  operator =(const vals & b){
        this -> val1 = b.val1;
        this -> val2 = b.val2;
    }
};
int main(){
    
    cout << setprecision(15);
    cout << fixed;
    int n,m,k;
    cin >> n >> m >> k;
    set<int>badpos;
    for(int i = 0; i < k; ++i){
        int tmp;
        cin >> tmp;
        badpos.insert(tmp);
    }
    vector<vals>dp(n+m+1);
    vals orig;
    for(int i = n; i >= 0; --i){
        if(badpos.count(i)){
            dp[i].val2 = 1;
        } else {
            dp[i] = orig;
            dp[i].val1 /= double(m);
            dp[i].val2 /= double(m);
            if(i != n)dp[i].val1 += 1.f;
        }
        orig = orig - dp[i + m];
        orig = orig + dp[i];
        //cerr << dp[i].val1 << " , "<< dp[i].val2 << " is the expected number of moves \n";
    }
    long double den = 1.0 - dp[0].val2;
    if(fabs(den) < 1e-9){
        cout <<"-1\n";
    } else {
        cout << dp[0].val1/den << "\n";
    }
    return 0;
}