#include <bits/stdc++.h>
using namespace std;
using Graph = vector<vector<int>>;
#define rep(i,n) for(int i=0; i<(n); i++)
#define INF ((1LL<<62)-(1LL<<31))
#define all(a)  (a).begin(),(a).end()
#define rall(a)  (a).rbegin(),(a).rend()
typedef long long ll;
typedef pair<ll,ll> pl;
typedef tuple<ll,ll,ll> tupl;

int main()
{
    ll a,b,c,d;
    cin >> a >> b >> c >> d;
    ll sum=a,tot=0;
    ll cnt=0;
    if(b/c>=d) {
        cout << -1 << endl;
        return 0;
    }
    while(true) {
        sum+=b;
        tot+=c;
        cnt++;
        if(sum<=tot*d) break;
    }  
    cout << cnt << endl;
    return 0;
}
#include <bits/stdc++.h>
using namespace std;

#define LSOne(S) ((S) & -(S))

typedef vector<long double> vld;
using ld = long double;

class FenwickTree {
private:
  vld ft; 
public:
  FenwickTree(int m) { ft.assign(m+1, 0); }

  ld rsq(int j) {  
    ld sum = 0;
    for (; j; j -= LSOne(j))
      sum += ft[j];
    return sum;
  }

  ld rsq(int i, int j) { return rsq(j) - rsq(i-1); }

  void update(int i, ld v) {
    for (; i < (int)ft.size(); i += LSOne(i))
      ft[i] += v;
  }

};

class RUPQ {
private:
  FenwickTree ft;
public:
  RUPQ(int m) : ft(FenwickTree(m)) {}
  void range_update(int ui, int uj, ld v) {
    ft.update(ui, v);
    ft.update(uj+1, -v);
  } 
  ld point_query(int i) { return ft.rsq(i); }
};

const ld MOD = 1000000007;
const int MAXN = 100005;

int n, m, k;

bool go_back[MAXN];
double ans[MAXN];

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	cout << fixed << setprecision(5) << "\n";

	cin >> n >> m >> k;
	
	int consec = 0;
	bool good = true;
	for (int i = 0; i < k; i++) {
		int x;
		cin >> x;
		go_back[x]=true;
		if (good) {
			if(go_back[x-1]){
				consec++;
			} else {
				consec=1;
			}
			if (consec==m) {
				good = false;
			}
		}
	}
	
	if (!good) {
		cout << "-1\n";
		return 0;
	}
	
	RUPQ ft(n);
	
	ld coef0 = m;
	ld scalar0 = m;
	
	int limit = n-1;
		
	ft.range_update(1, min(m,limit), -1);
	
	for (int i = 1; i < n; i++) {
		ld val = ft.point_query(i);
		if (go_back[i]) {
			coef0+=val;
		} else {
			scalar0-=val;
			ft.range_update(i+1,min(limit, i+m),val/m);
		}
	}
	
	cout << (scalar0/coef0) << "\n";
	
}
