#include <bits/stdc++.h>
using namespace std;
long long n, l, r, k;
long long check(long long n, long long len, long long k, long long i,
                int flag) {
  long long t = k + flag - n * i - len;
  if ((t - len) <= t && (n - len + t) >= t &&
      (!((t - flag) / i < ((t + i) / (i + 1)) ||
         (t - len + i - 1) / i > (n - len + t) / (i + 1)))) {
    long long tmp = min((t - flag) / i, (n - len + t) / (i + 1));
    long long a = t - tmp;
    long long b = -t + (i + 1) * tmp;
    return tmp;
  }
  return -1;
}
int main() {
  cin >> n >> l >> r >> k;
  long long ans = -1;
  long long len = (r + n - l + 1) % n;
  if (len == 0) len = n;
  if (n <= 3000) {
    for (long long a = 0; a <= len && k - a >= 0; ++a) {
      for (long long b = 0; b <= (n - len); ++b) {
        {
          long long x = (k - a - len);
          if (x % (a + b + n) == 0) {
            ans = max(ans, a + b);
          }
        }
        if (a > 0) {
          long long x = (k - (a - 1) - len);
          if (x % (a + b + n) == 0) {
            ans = max(ans, a + b);
          }
        }
      }
    }
  } else {
    for (long long i = 0; i <= k / n; ++i) {
      if (i == 0) {
        if (k <= 2 * len) {
          if (k < len) {
            break;
          }
          long long a = min(k - len + 1, len);
          long long b = n - len;
          ans = max(ans, a + b);
        }
      } else {
        long long t = k - n * i - len;
        if (t < 0) {
          break;
        }
        ans = max(ans, check(n, len, k, i, 0));
        ans = max(ans, check(n, len, k, i, 1));
      }
    }
  }
  cout << ans << endl;
}
