#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=200010,mod=1e9+7;
double f[N][2];
bool vis[N];
int main()
{
    int n, m, k;
    cin >> n >> m >> k;
    for (int i = 1; i <= k;i++)
    {
        int x;
        cin >> x;
        vis[x] = true;
    }
    double p = 0, q = 0;
    for (int i = n - 1; i >= 0;i--)
    {
        if(i + m <= n - 1)
        {
            p -= f[i + m + 1][0];
            q -= f[i + m + 1][1];
        }
        if(!vis[i])
        {
            f[i][0] = p / m;
            f[i][1] = q / m + 1;
        }
        else
        {
            f[i][0] = 1;
            f[i][1] = 0;
        }
        p += f[i][0];
        q += f[i][1];
    }
    if(fabs(1.00000-f[0][0])<=1e-12)
        puts("-1");
        else
            printf("%.6lf\n", f[0][1] / (1 - f[0][0]));
        return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define drep(i,n) for (int i = (n)-1; i >= 0; --i)
#define dup(x,y) (((x)+(y)-1)/(y))
#define ALL(x) (x).begin(), (x).end()
typedef long long ll;
typedef pair<int, int> pii;
const double EPS = 1e-10;
const int INF = 1e9;
const ll LINF = 1e18;
const int MOD = 1000000007;
const double PI = acos(-1);
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
template<typename T> bool chmax(T &a, T b) {if(a<b){a=b; return 1; } return 0; }
template<typename T> bool chmin(T &a, T b) {if(a>b){a=b; return 1; } return 0; }
ll gcd(ll a, ll b) { return b?gcd(b,a%b):a;}
ll lcm(ll a, ll b) { return a/gcd(a,b)*b;}
ll mpow(ll x, ll p) {
	if (p==0) return 1;
	ll res=mpow(x,p/2); res=res*res%MOD;
	return p%2?res*x%MOD:res;
}
ll lpow(ll x, ll p) {
	if (p==0) return 1;
	ll res=lpow(x,p/2); res*=res;
	return p%2?res*x:res;
}

#ifndef fenwick_tree_hpp
#define fenwick_tree_hpp

#include<vector>

template<typename T> struct Fenwick_Tree {
	private:
		int n;
		std::vector<T> bit;
	public:
		Fenwick_Tree(int _n): n(_n), bit(_n, 0) {}
		// [0, r)の要素の総和
		T sum(int i) {
			T s = 0;
			while (i > 0) {
				s += bit[i-1];
				i -= i & -i;
			}
			return s;
		}
		// [l, r)の要素の総和
		T sum(int l, int r) {
			return sum(r) - sum(l);
		}
		void add(int i, T x) {
			i += 1;
			while (i <= n) {
				bit[i-1] += x;
				i += i & -i;
			}
		}
};

#endif // fenwick_tree_hpp

const int M = 100000;

int main() {
	int n, m, k;
	cin >> n >> m >> k;
	vector<int> batsu(n+1, 0);
	Fenwick_Tree<double> fw_a(M+M+5), fw_b(M+M+5);
	rep(i,k) {
		int x; cin >> x;
		batsu[x]++;
		fw_a.add(x, 1);
	}
	for (int i = n-1; i >= 0; --i) {
		if (batsu[i]) continue;
		fw_a.add(i, fw_a.sum(i+1, i+m+1)/m);
		fw_b.add(i, fw_b.sum(i+1, i+m+1)/m + 1);
	}
	double a = fw_a.sum(0, 1);
	double b = fw_b.sum(0, 1);
	if (1 - a < EPS) cout << -1 << endl;
	else {
		double ans = b / (1 - a);
		cout << fixed << setprecision(10) << ans << endl;
	}
}