#include <bits/stdc++.h>
#pragma GCC optimize("Ofast", "inline", "-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
using namespace std;
namespace exgcd {
long long gao(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long k = gao(b, a % b, x, y);
  long long t = x;
  x = y;
  y = t - a / b * y;
  return k;
}
long long inv(long long a, long long mod) {
  long long x, y;
  long long d = gao(a, mod, x, y);
  return d == 1 ? (x % mod + mod) % mod : -1;
}
long long minx(long long a, long long b, long long c) {
  long long x, y;
  long long g = gao(a, b, x, y);
  if (c % g) assert(0);
  a /= g;
  b /= g;
  c /= g;
  x *= c;
  y *= c;
  x %= b;
  while (x <= 0) x += b;
  return x;
}
bool fuck(long long a, long long b, long long c, long long lx, long long ly,
          long long &x, long long &y) {
  long long g = gao(a, b, x, y);
  if (c % g) assert(0);
  a /= g;
  b /= g;
  c /= g;
  x *= c;
  y *= c;
  x = x % b - b - b + lx / b * b;
  while (x + b <= lx) x += b;
  if (x < 0) return 0;
  y = (c - a * x) / b;
  if (y >= 0 && y <= ly) return 1;
  if (y > ly) return 0;
  long long d = (abs(y) + a - 1) / a;
  y += d * a;
  x -= d * b;
  return x >= 0 && x <= lx && y >= 0 && y <= ly;
}
}  // namespace exgcd
long long n, d, k, x, y, ans = -1;
void doit(long long t) {
  if (t < 0) return;
  if (t == 0) {
    if (k >= d && k <= 2 * d) {
      ans = max(ans, (k - d == d ? d : k - d + 1) + n - d);
    }
    return;
  }
  long long aim = k - t * n - d;
  if (exgcd::fuck(t, t + 1, aim, n - d, d, x, y)) {
    ans = max(ans, x + y);
  }
}
void doit2(long long t) {
  if (t <= 0) return;
  long long aim = k - t * n - d;
  if (exgcd::fuck(t, t + 1, aim, n - d, d, x, y)) {
    if (!y) x -= t + 1, y += t;
    if (x >= 0 && x <= n - d && y >= 0 && y <= d) {
      ans = max(ans, x + y);
    }
  }
}
int main() {
  cin >> n >> x >> y >> k;
  d = y >= x ? y - x + 1 : y + n - x + 1;
  doit(0);
  for (long long i = n, nex; i <= n * 2; i = nex + 1) {
    long long t = k / i;
    nex = t == 0 ? 1e18 : k / t;
    doit(t - 1);
    doit(t);
    doit(t + 1);
  }
  ++k;
  for (long long i = n, nex; i <= n * 2; i = nex + 1) {
    long long t = k / i;
    nex = t == 0 ? 1e18 : k / t;
    doit2(t - 1);
    doit2(t);
    doit2(t + 1);
  }
  cout << ans << endl;
}
