#include <bits/stdc++.h>
using namespace std;
long long B;
long long n;
long long exgcd(long long a, long long b, long long &x, long long &y) {
  if (!b) {
    x = 1;
    y = 0;
    return a;
  }
  long long e = exgcd(b, a % b, x, y);
  long long kkz = x;
  x = y;
  y = kkz - a / b * y;
  return e;
}
long long ceildiv(long long a, long long b) {
  if (a % b == 0)
    return a / b;
  else
    return a / b + 1;
}
long long cal(long long a, long long x, long long y, bool flag) {
  long long t = 0;
  if (a != 0) {
    long long L = max(ceildiv(y - B, a), ceildiv(y - x, a + 1));
    long long R = min(flag ? y - 1 : y, (n - B + y - x) / (a + 1));
    if (L > R) return -1;
    t = R;
    x += t;
  } else {
    if (y > B) return -1;
    x = min(n, n - B + y);
  }
  return x;
}
long long GetX(long long a, long long b, long long c, bool flag = 1) {
  if (c < 0) return -1;
  long long x, y;
  long long k = exgcd(a, b, x, y);
  if (c % k) return -1;
  k = c / k;
  x *= k;
  y *= k;
  long long x1 = cal(a, x, y, flag);
  return x1;
}
bool can(long long x, long long y, long long k) {
  if (y >= 0 && y <= B && y <= x && x <= n - B + y)
    ;
  else
    return 0;
  if ((k - B - y) % (n + x) == 0) return 1;
  if (y > 0 && (k - B - (y - 1)) % (n + x) == 0) return 1;
  return 0;
}
int main() {
  long long k, l, r;
  cin >> n >> l >> r >> k;
  long long b = r >= l ? r - l + 1 : n - (l - r - 1);
  long long c;
  long long lc = (k - b - n) / (2 * n);
  long long rc = (k - b) / n;
  long long ans = -1;
  B = b;
  if (n > sqrt(1e7))
    for (c = lc; c <= rc; ++c) {
      long long x =
          max(GetX(c, 1, k + 1 - b - c * n, 1), GetX(c, 1, k - b - c * n));
      ans = max(ans, x);
    }
  else {
    for (long long i = 0; i <= n; ++i)
      for (long long j = 0; j <= i; ++j) {
        bool f;
        if (f = can(i, j, k)) ans = max(ans, i);
      }
  }
  cout << ans << endl;
  return 0;
}
