#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <set>

/* MACROS START */
#define input std::cin
#define for2(i,n) for(int i=0; i<n; i++)
#define for3(i,a,n) for(int i=a; i<n; i++)
#define for4(i,a,n,s) for(int i=a; i<n; i+=s)

using lint = long long int;
using namespace std;

template <typename T>
void printvec(T vec) {
  for (auto& a: vec)
	cout << a << " ";
  cout << endl;
}
/* MACROS END */

/* LIBRARY START */
/* LIBRARY END */

struct Expectation {
  double exact = 0, variable = 0;

  Expectation& operator+=(const Expectation& other) {
	this->exact += other.exact;
	this->variable += other.variable;
	return *this;
  }

  Expectation& operator-=(const Expectation& other) {
	this->exact -= other.exact;
	this->variable -= other.variable;
	return *this;
  }
};

Expectation operator/(const Expectation& e, double d) {
  return {e.exact/d, e.variable/d};
}

Expectation operator+(const Expectation& e, int d) {
  return {e.exact+d, e.variable};
}

int main() {
  std::ios_base::sync_with_stdio(0);
  int n, m, k; input >> n >> m >> k;
  set<int> traps;
  for2(i, k) {
	int tr; input >> tr;
	traps.insert(tr);
  }
  queue<Expectation> runsum;
  for2(i, m) {
	runsum.push({0, 0});
  }
  Expectation sum = {0, 0};
  for(int i=n-1; i>0; i--) {
	if (traps.count(i)) {
	  runsum.push({0, 1});
	} else {
	  runsum.push((sum + m) / m);
	}
	sum -= runsum.front(); runsum.pop();
	sum += runsum.back();
  }
  Expectation exp = (sum + m) / m;
  if (exp.variable >= 1.0 - 1e-9)
	std::cout << -1 << std::endl;
  else {
	double ans = exp.exact / (1.0 - exp.variable);
	std::cout << std::fixed << ans << std::endl;
  }
}


#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define pi 3.141592653589793238
#define int long long
#define ll long long
#define ld long double
using namespace __gnu_pbds;
using namespace std;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());


long long powm(long long a, long long b,long long mod) {
    long long res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a %mod;
        a = a * a %mod;
        b >>= 1;
    }
    return res;
}

ll gcd(ll a, ll b)
{
    if (b == 0)
        return a;
    return gcd(b, a % b);      
}

ld pre[200005];
ld cnt[200005];
ld dp[200005];

signed main()
{

ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(0);

#ifndef ONLINE_JUDGE
    if(fopen("INPUT.txt","r"))
    {
        freopen("INPUT.txt","r",stdin);
        freopen("OUTPUT.txt","w",stdout);
    }
#endif  

    int n,m,k;
    cin>>n>>m>>k;
    int a[n+m+2]={0};
    
    for(int i=0;i<k;i++)
    {
        int x;
        cin>>x;
        a[x]=1;
    }

    for(int i=n;i>=0;i--)
    {
        cnt[i]=cnt[i+1]+a[i];
    }

    ld l=1,r=1e12;
    ld eps=1e-8;

    while(r-l>eps)
    {
        ld mid=(l+r)/2;
        for(int i=n-1;i>=0;i--)
        {
            if(a[i]==1)
            {
                dp[i]=mid;
                pre[i]=pre[i+1]+dp[i];
            }
            else
            {
                dp[i]=(pre[i+1]-pre[i+m+1])/m+1;
                pre[i]=pre[i+1]+dp[i];
            }
        }

        if(dp[0]<mid)
        {
            r=mid;
        }
        else
        {
            l=mid;
        }
    }

    if(l>1e11)
    {
        cout<<-1;
        return 0;
    }
    cout<<fixed<<setprecision(5)<<l;




} 