//#pragma GCC optimize ("O2")
//#pragma GCC target ("avx2")
#include<bits/stdc++.h>
//#include<atcoder/all>
//using namespace atcoder;

using namespace std;
typedef long long ll;
#define rep(i, n) for(int i = 0; i < (n); i++)
#define rep1(i, n) for(int i = 1; i <= (n); i++)
#define co(x) cout << (x) << "\n"
#define cosp(x) cout << (x) << " "
#define ce(x) cerr << (x) << "\n"
#define cesp(x) cerr << (x) << " "
#define pb push_back
#define mp make_pair
#define chmin(x, y) x = min(x, y)
#define chmax(x, y) x = max(x, y)
#define Would
#define you
#define please


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


	int N, M, K;
	cin >> N >> M >> K;
	int A[200200] = {};
	rep(i, K) {
		int a;
		cin >> a;
		A[a] = 1;
	}

	double L = 0, R = 1e18;
	double dp[200200] = {};
	rep(i, 100) {
		double m = (L + R) / 2;

		double kari = 0;
		for (int i = N - 1; i >= 0; i--) {
			if (A[i] == 0) dp[i] = kari + 1;
			else dp[i] = m;
			kari += dp[i] / M;
			kari -= dp[i + M] / M;
		}

		if (dp[0] >= m) L = m;
		else R = m;
	}

	if (L > 1e17) {
		co(-1);
	}
	else {
		cout << setprecision(12) << L << endl;
	}
	Would you please return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long double ldb;
#define pb push_back
const int N = 1500005;
struct pldld
{
    ldb x,y;
    friend pldld operator + (const pldld x,const ldb y)
    {
        return {x.x,x.y+y};
    }
    friend pldld operator + (const pldld x,const pldld y)
    {
        return {x.x+y.x,x.y+y.y};
    }
    friend pldld operator - (const pldld x,const pldld y)
    {
        return {x.x-y.x,x.y-y.y};
    }
    friend pldld operator / (const pldld x,const ldb y)
    {
        return {x.x/y,x.y/y};
    }
}dp[N],s[N];
int a[N],flag[N];
int n,m,k;
int main()
{
    cin>>n>>m>>k;
    for (int i=1;i<=k;++i) cin>>a[i],flag[a[i]]=1;
    for (int i=n-1;i>=0;--i)
    {
        if (flag[i]) dp[i]={1,0};else
        {
            dp[i]=((s[i+1]-s[i+m+1])/m)+1;
        }
        s[i]=s[i+1]+dp[i];
    }
    if ((1-dp[0].x)<1e-9) {puts("-1");return 0;};
    ldb ans=dp[0].y/(-dp[0].x+1);
    printf("%.10f\n",(double)ans);
    return 0;
}