#include <bits/stdc++.h>

using namespace std;

typedef long double LD;

typedef pair<LD, LD> PDD;

const LD eps = 1e-6;

int main()
{
	int n, m, k; scanf("%d %d %d", &n, &m, &k);
	vector<int> a(k + 1), vis(n + 1);
	for (int i = 1; i <= k; i++)
		scanf("%d", &a[i]), vis[a[i]] = 1;
	
	vector<PDD> suf(n + m + 1, {0.0, 0.0}), f(n + 1);
	for (int i = n - 1; i >= 0; i--)
	{
		if (vis[i]) f[i] = (PDD){1.0, 0.0};
		else f[i] = (PDD){(suf[i + 1].first - suf[i + m + 1].first) / m,
						 (suf[i + 1].second - suf[i + m + 1].second) / m + 1.0};
		suf[i] = (PDD){suf[i + 1].first + f[i].first, suf[i + 1].second + f[i].second};
	}
	
	if (abs(f[0].first - 1.0) < eps) printf("-1\n");
	else printf("%.10Lf\n", f[0].second / (1.0 - f[0].first));
	
	return 0;
}
#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]);
	}
}