#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]);
	}
}
#include <bits/stdc++.h>
using namespace std;
//#include <atcoder/all>
//using namespace atcoder;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define rep1(i,n) for (int i = 1; i <= (n); ++i)
#define bit(n,k) ((n>>k)&1) //nのk　bit目
#define vec(T) vector<T>
#define vvec(T) vector<vector<T>>
using ll = long long;
using P = pair<int,int>;


template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
const ll llINF = 1LL << 60;
const int iINF = 1e9;

//------------------------------------------------

using Pd = pair<double,double>;

struct Solver{

    Pd add(Pd a,Pd b){
        a.first += b.first;
        a.second += b.second;
        return a;
    }

    Pd sub(Pd a,Pd b){
        a.first -= b.first;
        a.second -= b.second;
        return a;
    }

    Pd div(Pd a,int m){
        a.first /= m;
        a.second /= m;
        return a;
    }



    
    void solve(){
        int N,M,K;
        cin >> N >> M >> K;

        vec(Pd) dp(N+M+10);
        vec(int) st(N);

        int cnt=0;
        int pre,now;
        pre=-1;        
        rep(ki,K){
            cin >> now;
            if(now==pre+1) cnt++;
            else cnt=0;
            if(cnt==M-1){
                cout << -1 << endl;
                return;
            }
            st[now] = 1;
            pre = now;
        }

        Pd csum = {0,0};

        for(int i = N-1; i>=0; i--){
            csum = add(csum,dp[i+1]);
            csum = sub(csum,dp[i+M+1]);

            if(st[i]){
                dp[i].first = 1.0;
            }else{
                dp[i] = div(csum,M);
                dp[i].second += 1.0;
            }
        }
        double ans;
        ans = dp[0].second/(1.0-dp[0].first);

        printf("%6.4f\r\n",ans);


    }
};


int main(){
    int testcasenum=1;
    //cin >> testcasenum;
    rep1(ti,testcasenum){
        Solver solver;
        solver.solve();
    }
    return 0;
}