#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 == 0) cout << -1 << endl;
	else {
		double ans = b / (1 - a);
		cout << fixed << setprecision(10) << ans << endl;
	}
}
#include <iostream>
#include <cstdio>
#include <vector>
#include <iomanip>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <map>
#include <set>
#include <cmath>
using namespace std;

using VI = vector <int>;
using VVI = vector <VI>;
using VLL = vector <long long>;

int main() {
    int K;
    cin >> K;
    string S;
    string T;

    cin >> S >> T;

    double winning = 0;
    VLL remain(10, K);
    VVI cnt(2, VI(10));

    for (int i = 0; i < 4; ++i) {
        --remain[S[i]-'0'];
        --remain[T[i]-'0'];
        ++cnt[0][S[i]-'0'];
        ++cnt[1][T[i]-'0'];
    }

    long long totCard = 9*K-8;
    double sumProb = 0;

    for (int a = 1; a <= 9; ++a) {
        for (int b = 1; b <= 9; ++b) {
            double prob = 0;
            VVI ncnt = cnt;
            ++ncnt[0][a];
            ++ncnt[1][b];

            if (a==b) {
                if (remain[a] < 2) {
                    continue;
                }
                prob = (double)remain[a]*(remain[b]-1)/(totCard*(totCard-1));
            } else {
                if (remain[a] < 1 || remain[b] < 1) {
                    continue;
                }
                prob = (double)remain[a]*remain[b]/(totCard*(totCard-1));
            }

            VLL score(2);

            for (int i = 0; i < 2; ++i) {
                for (int j = 1; j <= 9; ++j) {
                    long long base = j;
                    for (int k = 0; k < ncnt[i][j]; ++k) {
                        base *= 10;
                    }

                    score[i] += base;
                }
            }

            // if T wins
            // cout << "GO " << a << " " << b << " " << score[0] << " " << score[1] << endl;
            if (score[0] > score[1]) {
                // cout << "NOW " << a << " " << b << " " << prob << endl;
                winning += prob;
            }
            sumProb += prob;
        }
    }

    cout << setprecision(15) << fixed << winning << endl;
    // cout << setprecision(15) << fixed << sumProb << endl;

    return 0;
}