#include <iostream>

using namespace std;
typedef long double ld;
int a[100],ok[100010] = {};
ld dp[100010],sum[200010];
int main(){
    cout.precision(20);
    int i,j,n,m,k;
    cin >> n >> m >> k;
    for(i=0;i<k;i++){
        cin >> a[i]; ok[a[i]] = 1;
    }
    for(i=0;i<k;i++){
        for(j=i;j<k;j++){
            if(a[j] - a[i] + 1==j - i + 1 && j - i + 1>=m){
                cout << -1 << endl;
                return 0; 
            }
        }
    }
    ld le = 0,ri = 1000000000000000000;
    for(int t = 0;t<100;t++){
        ld mid = (le + ri)/2;
        dp[n] = 0;
        for(i=0;i<=n;i++) sum[i] = 0;
        for(i=n - 1;i>=1;i--){
            dp[i] = ((ld)1/(ld)m)*(sum[i + 1] - sum[i + m + 1]) + 1;
            if(ok[i]) dp[i] = mid;
            sum[i] = sum[i + 1] + dp[i];
        }
        ld y = (sum[1] - sum[m + 1])/(ld)(m) + 1;
        dp[0] = y;
        if(mid>y) ri = mid;
        else le = mid;
    }
    cout << le << endl;
}

#include <bits/stdc++.h>
#define double long double

using namespace std;

#define debug(x) cerr << #x << " = " << x << endl
#define boost ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

#define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); \
stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }

void err(istream_iterator<string> it) { cout << endl; }

template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
    cerr << *it << " = " << a << " ";
    err(++it, args...);
}

template<typename T>
inline void read(T& x) {
    x = 0; T f = 1; char ch = getchar();
    while (!isdigit(ch)) f = (ch == '-') ? -1 : 1, ch = getchar();
    while (isdigit(ch)) x = x * 10 + ch - 48, ch = getchar();
    x *= f;
}

template<typename T, typename ...Args>
inline void read(T& x, Args&... args) { read(x), read(args...); }

constexpr int MAXN = 1e5 + 5, MOD = 1e9 + 7;

int n, m, k;
array<int, 11> a;
array<double, MAXN * 2> sufa, sufb;


int main() {
    boost;
    cin >> n >> m >> k;
    cout << setprecision(4) << fixed;
    set<int> s;
    for (int i = 1; i <= k; i++) cin >> a[i], s.insert(a[i]);
    for (int i = n - 1; i >= 0; i--) {
        if (s.count(i)) {
            sufa[i] = sufa[i + 1] + 1;
            sufb[i] = sufb[i + 1];
            continue;
        }
        double tmpa = (sufa[i + 1] - sufa[i + m + 1]) / m;
        double tmpb = (sufb[i + 1] - sufb[i + m + 1]) / m + 1;
        sufa[i] = sufa[i + 1] + tmpa;
        sufb[i] = sufb[i + 1] + tmpb;
        if (i == 0) {
            if (abs(1.0 - tmpa) > 1e-15)cout << tmpb / (1.0 - tmpa) << endl;
            else cout << -1 << endl;
        }
    }   
    return 0;
}