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

int A[200005], B[200005];
long double E[200005], F[200005], G[200005], H[200005];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(NULL), cout.tie(NULL);
    
    int n, m, k;
    cin >> n >> m >> k;
    
    while (k--)
    {
        int x;
        cin >> x;
        
        A[x] = 1;
    }
    
    for (int i=1; i<=n+m+1; i++)
        B[i] = B[i-1] + A[i];
    
    for (int i=n-1; i>=0; i--)
    {
        if (A[i] == 0)
        {
            E[i] = 1 + (F[i+1] - F[i+m+1]) / m;
            G[i] = (H[i+1] - H[i+m+1] + B[i+m] - B[i]) / m;
        }
        
        F[i] = F[i+1] + E[i];
        H[i] = H[i+1] + G[i];
    }
    
    if (abs(G[0] - 1) < 1e-9 || G[0] > 1)
        cout << -1 << "\n";
    else
        cout << fixed << setprecision(9) << E[0] / (1 - G[0]) << "\n";
    
    return 0;
}

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

typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> ii;
typedef tuple<ll, ll, ll> iii;
typedef vector<ll> vi;
typedef vector<ii> vii;
typedef vector<iii> viii;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
#define REP(i,n) for (ll i = 0; i < n; ++i)
#define REPR(i,n) for (ll i = n-1; i >= 0; --i)
#define FOR(i,m,n) for (ll i = m; i < n; ++i)
#define FORR(i,m,n) for (ll i = n-1; i >= m; --i)
#define FORE(x,xs) for (const auto& x : xs)
#define FORI(i,v) for (auto i = v.begin(); i != v.end(); i++)
#define ALL(v) v.begin(), v.end()
#define SORT(v) sort(ALL(v))
#define REV(v) reverse(ALL(v))
#define UNIQ(v) sort(ALL(v)); v.erase(unique(ALL(v)),end(v))
#define CHMIN(x,y) x = min(x, y)
#define CHMAX(x,y) x = max(x, y)
#define YES(b) cout << ((b) ? "YES" : "NO") << endl
#define Yes(b) cout << ((b) ? "Yes" : "No") << endl

const int MAX = 1e5+10;

int N, M, K;
set<int> A;

ld dp[2*MAX];

bool check(ld p) {
    fill_n(dp, MAX, 0);
    ld s = 0;
    REPR (i, N) {
        if (A.find(i) == A.end()) dp[i] = 1 + s / M;
        else dp[i] = p;
        s += dp[i];
        s -= dp[i+M];
    }
    return dp[0] > p;
}

int main() {
    cout << fixed << setprecision(15);
    cin >> N >> M >> K;
    REP (i, K) {
        int a;
        cin >> a;
        A.insert(a);
        if (A.find(a-M+1) != A.end() && distance(A.find(a-M+1), A.find(a)) == M-1) {
            cout << -1 << endl;
            return 0;
        }
    }

    ld ub = 1;
    while (1) {
        ld ok = 1e-3, ng = ub;
        while (ng - ok > 1e-4) {
            ld mid = sqrtl(ok * ng);
            if (check(mid)) ok = mid;
            else ng = mid;
        }
        if (ub - ok > 1e3) {
            cout << ok << endl;
            return 0;
        }
        ub *= 4;
    }
}
