#include <bits/stdc++.h>
using namespace std;

int main(){
	int N, M, K, i, j;
	scanf("%d%d%d", &N, &M, &K);
	vector<int> is_hazure(N + 1, 0);
	for(i = 0; i < K; i++){
		int A;
		scanf("%d", &A);
		is_hazure[A] = 1;
	}
	int now = 0;
	for(i = 0; i <= N; i++){
		if(is_hazure[i] == 1){
			now++;
		}
		else{
			now = 0;
		}
		if(now >= M){
			printf("-1\n");
			return 0;
		}
	}
	vector<long double> x(N + 1), s(N + 1);
	long double l = 0, h, r = 1e11;
	for(i = 0; i < 200; i++){
		h = (l + r) / 2;
		x[N] = 0;
		s[N] = 0;
		for(j = N - 1; j >= 0; j--){
			if(is_hazure[j] == 1){
				x[j] = h;
			}
			else{
				x[j] = 1 + (s[j + 1] - s[min(N, j + M + 1)]) / M;
			}
			s[j] = s[j + 1] + x[j];
		}
/*		printf("h = %lf\n", h);
		printf("x:\n");
		for(j = 0; j <= N; j++){
			printf("%lf ", x[j]);
		}
		printf("\n");
		printf("s:\n");
		for(j = 0; j <= N; j++){
			printf("%lf ", s[j]);
		}
		printf("\n");
*/		if(x[0] > h){
			l = h;
		}
		else{
			r = h;
		}
	}
	printf("%.10Lf\n", l);
	return 0;
}
#include<bits/stdc++.h>

int main(){
    using namespace std;
    unsigned long N, M, K;
    cin >> N >> M >> K;
    const auto unavailable{[&N, &M, &K]{
        vector<unsigned long> unavailable(N + 1);
        vector<unsigned long> ban;
        for(unsigned long i{0}, a; i < K; ++i){
            cin >> a;
            unavailable[a] = 1;
            ban.push_back(a);
        }
        sort(begin(ban), end(ban));
        for(unsigned long i{M - 1}; i < K; ++i)if(ban[i - M + 1] + M - 1 == ban[i])exit(puts("-1") & 0);
        return unavailable;
    }()};
    const auto iteration{[&N, &M, &unavailable](long double x) -> long double {
        vector<long double> dp(N + 1);
        long double now{0}, c{0}, tmp{0}, y{0};
        for(unsigned long i{N}; i--; ){
            dp[i] = unavailable[i] ? x : now / M + 1;
            now += dp[i];
            now -= dp[min(N, i + M)];
        }
        return dp[0];
    }};
    constexpr long double eps{1e-10};
    cout << setprecision(15) << [&iteration]{
        auto [l, r]{[&iteration]{
            if(2 > iteration(2))return make_pair(1.0L, 2.0L);
            long double r{2};
            while(r * r < iteration(r * r))r *= r;
            return make_pair(r, r * r);
        }()};
        for(unsigned long i{0}; i < 20; ++i){
            long double m{sqrt(l) * sqrt(r)};
            (m < iteration(m) ? l : r) = m;
        }
        return l;
    }() << endl;
    return 0;
}
