#include <bits/stdc++.h>
#define watch(x) std::cout << (#x) << " is " << (x) << std::endl
using LL = long long;
using pii = std::pair<int, int>;
using pll = std::pair<LL, LL>;

const int N = 100;
double dp[N + 1][N + 1][N + 1];
double  f(int i, int j, int k) {
	if (k > j) std::swap(j ,k);
	if (j > i) std::swap(i, j);
	return dp[i][j][k];
}
void solve() {
	for (int i = N - 1; i >= 0; --i) {
		for (int j = i; j >= 0; --j) {
			for (int k = j; k >= 0; --k) if (i + j + k) {
				dp[i][j][k] = 1 + (f(i + 1, j, k) * i + f(i, j + 1, k) * j + f(i, j, k + 1) * k) / (i + j + k);
			}
		}
	}
}

int main() {
	//freopen("in","r",stdin);
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	solve();
	std::vector<int> a(3);
	for (auto &x : a) std::cin >> x;
	std::sort(a.begin(), a.end());
	std::cout.precision(12);
	std::cout << std::fixed << f(a[2], a[1], a[0]) << std::endl;;
	return 0;
}
#include <bits/stdc++.h>
#include <unistd.h>
#define FAST_IO ios::sync_with_stdio(0);cin.tie(NULL)
#define all(v) (v).begin(),(v).end()
using namespace std;

void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}

template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif

typedef long long Long;
typedef long double Double;
typedef unsigned long long ULong;
typedef pair<Double, Double> Pair;

const int N = 1e6;
const Double EPS = 1e-9;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
Long random(Long a, Long b) { return uniform_int_distribution<Long> (a, b) (rng); }

Pair operator + (const Pair& a, const Pair& b) {
  return {a.first + b.first, a.second + b.second};
}

Pair operator - (const Pair& a, const Pair& b) {
  return {a.first - b.first, a.second - b.second};
}

Pair operator / (const Pair& a, Double k) {
  return {a.first / k, a.second / k};
}

void Solve(void) {
  Long n, m, k;
  cin >> n >> m >> k;
  if (k == 0) {
    vector<Double> dp(n + m + 2, 0.0);
    vector<Double> suffix(n + m + 2, 0.0);
    for (int i = n - 1; i >= 0; i--) {
      Double sum = suffix[i + 1] - suffix[i + m + 1];
      dp[i] = sum / m + 1;
      suffix[i] = dp[i] + suffix[i + 1];
    }
    cout << dp[0] << '\n';
  } else {
    vector<bool> is_hole(n + m + 2, false);
    for (int i = 0; i < k; i++) {
      int a;
      cin >> a;
      is_hole[a] = true;
    }
    vector<int> prefix(n + m + 2, 0);
    for (int i = 1; i <= n; i++) {
      prefix[i] = prefix[i - 1];
      if (is_hole[i]) prefix[i]++;
    }
    for (int i = 1; i < n - m + 1; i++) {
      if (prefix[i + m - 1] - prefix[i - 1] == m) {
        cout << -1 << '\n';
        return;
      }
    } 
    vector<Pair> dp(n + m + 2, {0.0, 0.0});
    vector<Pair> suffix(n + m + 2, {0.0, 0.0});
    Pair one = {0.0, 1.0};
    for (int i = n - 1; i >= 0; i--) {
      if (is_hole[i]) {
        dp[i] = {1.0, 0};
      } else {
        Pair sum = suffix[i + 1] - suffix[i + m + 1];
        dp[i] = sum / m + one;
      }
      suffix[i] = dp[i] + suffix[i + 1];
    }
    Double ans = dp[0].second / (1.0 - dp[0].first);
    cout << fixed << setprecision(10) << ans << '\n';
  }
}

int main(void) {
  FAST_IO;
  int t = 1;
  //cin >> t;
  while (t--) Solve();
  return 0;
}
