#include <bits/stdc++.h>
using namespace std;
const long long MOD7 = 1000000007;
long long bpow(long long a, long long d, long long mod) {
  if (d == 0) return 1;
  long long t = bpow(a, d / 2, mod);
  t = (t * t) % mod;
  if (d & 1) t = (t * a) % mod;
  return t;
}
long long bpow(long long a, long long d) {
  if (d == 0) return 1;
  long long t = bpow(a, d / 2);
  t = (t * t);
  if (d & 1) t = (t * a);
  return t;
}
long long gcd(long long a, long long b) {
  while (a && b)
    if (a > b)
      a %= b;
    else
      b %= a;
  return a + b;
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long C(long long n, long long k) {
  long long res = 1;
  for (int i = 1; i <= k; ++i) res = res * (n - k + i) / i;
  return res;
}
long long C(long long n, long long k, long long mod) {
  long long u = 1, d = 1;
  for (int i = 2; i <= n; ++i) u = (u * i) % mod;
  int x = max(k, n - k), z = min(k, n - k);
  for (int i = 2; i <= x; ++i) {
    d = (d * i) % mod;
    if (i <= z) d = (d * i) % mod;
  }
  d = bpow(d, mod - 2, mod);
  long long res = (u * d) % mod;
  return res;
}
void solve() {
  long long n, k, m, d;
  cin >> n >> k >> m >> d;
  long long ans = 0;
  for (int di = 1; di <= d; ++di) {
    long long l = 1, r = m + 1;
    while (r - l > 1) {
      long long mid = (r + l) / 2;
      long long val = (n / mid + k - 1) / k;
      if (val >= di)
        l = mid;
      else
        r = mid;
    }
    if ((n / l + k - 1) / k == di) ans = max(ans, (n / l + k - 1) / k * l);
  }
  cout << ans;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  solve();
  return 0;
}
