#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2")
using namespace std;
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cout << *it << " : " << a << endl;
  err(++it, args...);
}
long long int limit, full_tank, dis, estation, wyn = 0;
void inicio(long long int turno, long long int fuel);
void estacion_de_ida(long long int turno, long long int fuel, bool redemption);
void final(long long int turno, long long int fuel);
void estacion_de_vuelta(long long int turno, long long int fuel,
                        bool redemption);
void inicio(long long int turno, long long int fuel) {
  if (limit == turno) return;
  long long int distance = estation;
  if (fuel >= distance)
    estacion_de_ida(turno, (fuel - distance), false);
  else
    estacion_de_vuelta(turno - 1, -1, true);
}
void estacion_de_ida(long long int turno, long long int fuel, bool redemption) {
  if (redemption) {
    wyn++;
    final(turno + 1, (full_tank - (dis - estation)));
  } else {
    long long int distance = dis - estation;
    if (fuel >= distance)
      final(turno + 1, fuel - distance);
    else {
      wyn++;
      final(turno + 1, full_tank - distance);
    }
  }
}
void final(long long int turno, long long int fuel) {
  if (limit == turno) return;
  long long int distance = (dis - estation);
  if (fuel >= distance)
    estacion_de_vuelta(turno, fuel - distance, false);
  else
    estacion_de_ida(turno - 1, -1, true);
}
void estacion_de_vuelta(long long int turno, long long int fuel,
                        bool redemption) {
  if (redemption) {
    wyn++;
    inicio(turno + 1, full_tank - estation);
  } else {
    long long int distance = estation;
    if (fuel >= distance)
      inicio(turno + 1, fuel - distance);
    else {
      wyn++;
      inicio(turno + 1, full_tank - distance);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin.exceptions(cin.failbit);
  ;
  cin >> dis >> full_tank >> estation >> limit;
  bool chi1 = true, chi2 = true, chi3 = true;
  if (full_tank < estation or full_tank < (dis - estation)) chi1 = false;
  if (full_tank < 2 * (dis - estation)) chi2 = false;
  if (full_tank < 2 * estation) chi3 = false;
  if ((limit >= 1 and !chi1) or (limit >= 2 and (!chi1 or !chi2)) or
      (limit >= 3 and (!chi1 or !chi2 or !chi3)))
    cout << -1 << endl;
  else {
    inicio(0, full_tank);
    cout << wyn << endl;
  }
  return 0;
}
