#include <bits/stdc++.h>
 
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rep(i, n) for (int i = 0; i < (n); i++)
#define endl "\n"
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

template <typename T> ostream &operator<<(ostream &os, const vector<T> &vec) {os << "["; for (const auto &v : vec) {os << v << ","; } os << "]"; return os;}
template <typename T, typename U> ostream &operator<<(ostream &os, const pair<T, U> &p) {os << "(" << p.first << ", " << p.second << ")"; return os;}

double h0(long double P, int N, int M, unordered_set<int> &A) {
    vector<long double> h(N + M + 1);
    for (int i = 0; i <= M; i++) {
        h[N + i] = 0;
    }
    long double sum = 0;
    for(int i = N - 1; i >= 0; i--) {
        if (A.find(i) != A.end()) {
            h[i] = P;
        } else {
            h[i] = sum / M + 1.0;
        }
        sum += h[i];
        sum -= h[i + M];
    }
    return h[0];
}

void solve() {
    int N, M, K;
    cin >> N >> M >> K;
    vector<int> A(K), B(100001);
    for (int i = 0; i < K; i++) {
        cin >> A[i];
        B[A[i]]++;
    }

    int cnt = 0;
    for (int i = 0; i < 100001; i++) {
        if (B[i]) cnt++; else cnt = 0;
        if (cnt >= M) {
            cout << -1 << endl;
            return;
        }
    }

    unordered_set<int> A_;
    for (int i = 0; i < K; i++) {
        A_.insert(A[i]);
    }

    long double ok = 0.0;
    long double ng = 8e10;

    for (int k = 0; k < 60; k++) {
        long double P = (ok + ng) / 2;
        if (h0(P, N, M, A_) <= P) {
            ng = P;
        } else {
            ok = P;
        }
    }
    cout << ok << endl;
}

int main() {
    #ifdef LOCAL_ENV
    cin.exceptions(ios::failbit);
    #endif
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout.setf(ios::fixed);
    cout.precision(16);
    
    solve();
}
#include <iostream>
#include <stack>
#include <string>
#include <vector>
#pragma warning(disable:4996)
using namespace std;
#define int long long
stack<int>way;
int N,M,K;
double ex[200100];
double ep[200100];
double epex[200100];
vector<pair<int, int>>x;
signed main()
{
	ios_base::sync_with_stdio(false);
	cin >> N>>M >> K;
	int i;
	for (i = 0; i < K; i++)
	{
		int a;
		cin >> a;
		ep[a] = 1;
	}
	for (i = N; i <= N + M; i++)
	{
		ex[i] = 0;
	}
	double curex = 0, curep = 0,expex=0;
	for (i = N - 1; i >= 0; i--)
	{
		int isb = ep[i] >= 0.99999999;
		if (isb)
			goto T;
		ep[i] = curep;
		
		if (ep[i] <=0.999999999)
		{
			ex[i] = ((curex))/(M-curep*M)+1;
			if(curep>0)
				epex[i] = expex / (curep*M)+1;
		}
		else
		{
			if (!isb)
			{
				if (curep > 0)
					epex[i] = expex / (curep*M) + 1;
			}
		}
		T:
		curex -= ex[i + M]*(1-ep[i+M]);
		curep -= ep[i + M]/M;
		expex -= epex[i + M]*ep[i+M];
		curex += ex[i]*(1-ep[i]);
		curep += ep[i]/M;
		expex += epex[i]*ep[i];
	}
	i = 0;
	if (ep[i] >= 0.99999999)
		cout << -1;
	else
	{
		cout << ((1 - ep[i]) * ex[i] +epex[i]*ep[i]) / (1 - ep[i]);
	}
}