#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define _GLIBCXX_DEBUG
using namespace std;
using ll = long long;
using P = pair<int,int>;

const int Max_W = 1000000, INF = 1e9;
int dpmin[Max_W+1], dpmax[Max_W+1];

int main(){
    int a, b, w;
    cin >> a >> b >> w;
    w *= 1000;
    fill(dpmin, dpmin+w+1, INF);
    fill(dpmax, dpmax+w+1, -INF);
    for (int i = a; i <= b; i++){
        dpmin[0] = 0;
        dpmax[0] = 0;
        for (int j = 0; j <= w; j++){
            if (j - i >= 0) {
                dpmin[j] = min(dpmin[j-i] + 1, dpmin[j]);
                dpmax[j] = max(dpmax[j-i] + 1, dpmax[j]);
            }
        }
    }
    if (dpmin[w] == INF || dpmax[w] == -INF) {
        cout << "UNSATISFIABLE" << endl;
        return 0;
    }
    cout << dpmin[w] << " " << dpmax[w] << endl;
    return 0;
}
#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0; i < (int)(n); i++)

using namespace std;
using LL = long long;
using P = pair<int,int>;
const long double INF = 2e12;
const long double eps = 1e-12;

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

long double solve(long double ans){
	vector<long double> dp(N + 1), sum(N + 1);
	rep(i,N){
		int n = N - 1 - i;
		if(A[n]) dp[n] = ans;
		else dp[n] = (sum[i] - sum[max(0, i - M)]) / M + 1;
		sum[i+1] = sum[i] + dp[n];
	}
	return dp[0];
}

long double binary_search(long double left, long double right){
	if(right - left < eps * left) return left;
	long double ans = sqrt(left * right);
	long double res = solve(ans);
	if(ans > res) right = ans;
	else left = ans;
	return binary_search(left, right);
}

int main(){
	cin >> N >> M >> K;
	A = vector<int>(N + 1);
	rep(i,K){
		int a;
		cin >> a;
		A[a] = 1;
	}
	int num = 0;
	rep(i,N+1){
		if(A[i]) num++;
		else num = 0;
		if(num >= M){
			cout << -1 << endl;
			return 0;
		}
	}
	cout << setprecision(20) << binary_search(1, INF) << endl;

	return 0;
}
