#include <bits/stdc++.h>
using namespace std ;
#define int         long long
#define pb			push_back
#define ppb			pop_back
#define pf			push_front
#define ppf			pop_front
#define all(x)		(x).begin() , (x).end()
#define sz(x)		(int)((x).size())
#define rep(i,a,b)  for(int i=a;i<b;i++) 
#define ppc			__builtin_popcount
#define mp          make_pair
 
  void solve(){
    float a,b,c,d;
    cin>>a>>b>>c>>d;
  //int i=0;
  if(d*c <= b)
    {
      cout<< "-1";
    return;
    }
   else{
      cout<<(int)ceil((a/(c*d - b))) ;
   }
    
    

  }


signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int k =1;
 //cin>>k;
while(k--){
    // cout<<n;
   solve();
}
}

     


  



#include<iostream>
#include<bitset>
#include<string>
#include<vector>
#include<queue>
#include<random>
#include<map>
#include<set>
#include<stack>
#include<functional>
#include<unordered_map>
#include<unordered_set>
#include<algorithm>
#include<ctime>


using namespace std;
using Graph = vector<vector<int>>;
const long long INF = 1LL << 60;
typedef long long ll;

#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
#define all(v) v.begin(), v.end()

//ll の最大値　2147483647≒10^9
//long longの最大値　9,223,372,036,854,775,807≒10^18

ll gcd(ll a, ll b) {
    if (a % b == 0) {
        return b;
    }
    else {
        return gcd(b, a % b);
    }
}
ll digit(ll x) {
    ll d = 0;
    while (x) {
        d++;
        x /= 10;
    }
    return d;
}
ll modpow(ll a, ll n, ll mod) {
    long long res = 1;
    while (n > 0) {
        if (n & 1) res = res * a % mod;
        a = a * a % mod;
        n >>= 1;
    }
    return res;
}
struct UnionFind {
    vector<int> par, siz;
    UnionFind(int n) :par(n, -2), siz(n, 1) {}
    void red(int x) {
        par[x] = -1;
    }
    int root(int x) {
        if (par[x] == -1) {
            return x;
        }
        else {
            return par[x] = root(par[x]);
        }
    }
    bool issame(int x, int y) {
        return root(x) == root(y);
    }
    bool unite(int x, int y) {
        x = root(x);
        y = root(y);

        if (x == y) {
            return false;
        }
        if (siz[x] < siz[y]) {
            swap(x, y);
        }
        par[y] = x;
        siz[x] += siz[y];
        return true;
    }
    int  size(int x) {
        return siz[root(x)];
    }
};
template<class T> void chmin(T& a, T b) {
    if (a > b) {
        a = b;
    }
}
template<class T> void chmax(T& a, T b) {
    if (a < b) {
        a = b;
    }
}


int main() {
    double A, B, C, D;
    cin >> A >> B >> C >> D;
    if (C * D - B <= 0) {
        cout << -1 << endl;
    }
    else {
        cout << ceil(A / (C * D - B)) << endl;
    }
}
