#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long n, l, r, k;
void add(long long a, long long b, long long &l, long long &r) {
  if (a == 0) {
    if (b < 0) {
      l = 1, r = 0;
      return;
    }
  } else if (a > 0) {
    if (b < 0) {
      l = 1, r = 0;
      return;
    } else
      r = min(r, b / a);
  } else {
    a *= -1;
    b *= -1;
    l = max(l, (b + a - 1) / a);
  }
}
int main() {
  scanf("%lld%lld%lld%lld", &n, &l, &r, &k);
  long long cnt = r - l + 1;
  if (cnt <= 0) cnt += n;
  long long ans = -1;
  for (long long d1 = 1; d1 <= 2; d1++) {
    for (long long d2 = 0; d1 + d2 <= 2; d2++) {
      for (long long l = 1;; l++) {
        long long s = k / l;
        long long cl = max(n, l), cr = 2 * n;
        add(-s, 2 * (cnt - 1) + d1 - k, cl, cr);
        add(s, k - d1 - (cnt - 1), cl, cr);
        add(s + 1, 2 * (n - cnt) + k + d2, cl, cr);
        add(-s - 1, -k - d2 - n + cnt, cl, cr);
        if (s > 0) {
          long long r = k / s;
          cr = min(cr, r);
          l = r;
        }
        if (cl <= cr) ans = max(ans, cr - n);
        if (s == 0) break;
      }
    }
  }
  if (cnt == n) {
    for (long long i = 1; i * i <= k; i++)
      if (k % i == 0) {
        if (n <= i && i <= 2 * n) ans = max(ans, i - n);
        if (n <= k / i && k / i <= 2 * n) ans = max(ans, k / i - n);
      }
  }
  printf("%lld\n", ans);
}
