#include <bits/stdc++.h>
using namespace std;
const long long M = 1e6;
long long n, k, l, r, ans = -1;
void calcA(long long t, bool flag = false) {
  for (long long a = 0; a <= n; ++a) {
    long long gt = t / (a + n);
    for (int j = -1; j <= 1; ++j) {
      long long g = gt + j;
      if (g < 0) {
        continue;
      }
      long long ato = t - r - n * g - a * g;
      if (ato < 0 || ato > a || ato > r || (n - r) < a - ato ||
          (flag && ato == 0)) {
        continue;
      }
      ans = max(ans, a);
    }
  }
}
void calcG(long long t, bool flag = false) {
  for (long long g = 1; g * n <= t; ++g) {
    long long tg = t - n * g - r;
    if (tg < 0) {
      continue;
    }
    long long board = min(tg / g, (tg + n - r) / (1 + g));
    for (long long ag = board;
         ag >= max(max(0LL, board - 4), max((tg - r) / g, tg / (g + 1)));
         --ag) {
      long long a = ag;
      long long ato = tg - a * g;
      if (ato < 0 || ato > a || ato > r || (n - r) < a - ato ||
          (flag && ato == 0)) {
        continue;
      }
      ans = max(ans, a);
    }
  }
  long long ato = t - r;
  long long a = n - r + ato;
  if (a < 0 || a > n || ato < 0 || ato > r || (n - r) < a - ato ||
      (flag && ato == 0)) {
    return;
  }
  ans = max(ans, a);
}
void calcA() {
  calcA(k);
  calcA(k + 1, true);
}
void calcG() {
  calcG(k);
  calcG(k + 1, true);
}
void solve() {
  cin >> n >> l >> r >> k;
  l--, r--;
  r = (r - l + n) % n + 1LL;
  if (n < M) {
    calcA();
  } else {
    calcG();
  }
  cout << ans;
}
int main() {
  ios::sync_with_stdio(0);
  cout.tie(0), cin.tie(0);
  solve();
  return 0;
}
