#include <bits/stdc++.h>
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL);
typedef long long int ll;
#define F first
#define S second
#define PB push_back
#define MP make_pair
#define loop(i,a, n) for(ll i = a; i < n; ++i)
ll N=1000000007;
using namespace std;
#include<ext/pb_ds/tree_policy.hpp>
#include<ext/pb_ds/assoc_container.hpp>

using namespace __gnu_pbds;

template <typename num_t>
using ordered_set = tree<num_t, null_type, less_equal<num_t>, rb_tree_tag, tree_order_statistics_node_update>;
void init_code(){
    //copy(list.begin(),list.end(),ostream_iterator<int>(cout," "));
    fast_io;
    #ifndef ONLINE_JUDGE
        freopen("INPUT$.txt", "r", stdin);
        freopen("OUTPUT$.txt", "w", stdout);
        freopen("ERROR.txt","w",stderr);
    #endif
}
/*ll msb(ll n){
	for(int i=55;i>=0;i--){
		if((n&(1LL<<i))){
			return i;
		}
	}
	return 0;
}*/
void solve(){
	ll n,m,k,a,b,c,d;
	cin>>a>>b>>c>>d;
	ll blue=a,red=0;
	loop(x,1,a+1){
		blue+=b;
		red+=c;
		if(blue<=red*d){
			cout<<x<<endl;
			return;
		}
	}
	cout<<-1<<endl;
}
int main(){
	init_code();
	ll t;
	//cin>>t;
	//while(t-->0){
		solve();
	//}
}
	
#include <bits/stdc++.h>

using namespace std;

template <typename T> inline void read(T &x)
{
	int f = 1; x = 0; char c = getchar();
	for (; !isdigit(c); c = getchar()) if (c == '-') f = -1;
	for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);
	x *= f;
}

const int N = 4e5 + 5;

int n, m, k, a[N];

struct Function { double k, b; } p[N];

int main()
{
	read(n); read(m); read(k);
	for (int i = 1; i <= k; i++)
	{
		read(a[i]);
		p[a[i]].k = 1;
		
	}
	
	double tk = 0, tb = 0;
	for (int i = n - 1; i >= 0; i--)
	{
		if (!p[i].k)
		{
			p[i].k = tk / m;
			p[i].b = tb / m + 1;
		}
		
		tk += p[i].k;
		tb += p[i].b;
		tk -= p[i + m].k;
		tb -= p[i + m].b;
	}
	
	p[0].k -= 1;
	if (fabs(p[0].k) < 1e-9) puts("-1");
	else printf ("%.9f\n", -p[0].b / p[0].k);
	
  	return 0;
}
