#include <bits/stdc++.h>
using namespace std;
const long long INF = 1E9 + 7;
template <class C>
void mini(C& a4, C b4) {
  a4 = min(a4, b4);
}
template <class C>
void maxi(C& a4, C b4) {
  a4 = max(a4, b4);
}
long long tr(long long a) { return (a * a - a) / 2 + a; }
long long pole(long long A, long long B, long long l) {
  if (l <= A && l <= B) {
    return tr(l);
  }
  if (l > A) {
    long long x = l - A;
    if (x >= B) return A * B;
    return A * x + pole(A, B - x, l - x);
  }
  if (l > B) {
    return pole(B, A, l);
  }
  assert(false);
}
long long tnij(long long x, long long y, long long x2, long long y2) {
  long long a = max(x, x2);
  long long b = min(y, y2);
  if (b >= a) return (b - a) + 1;
  return 0;
}
long long area(long long n, long long x, long long y, long long l) {
  long long a, b, c, d;
  a = pole(n - x + 1, n - y + 1, l);
  b = pole(n - x + 1, y, l);
  c = pole(x, n - y + 1, l);
  d = pole(x, y, l);
  long long s = a + b + c + d;
  s -= tnij(1, n, x - l + 1, x + l - 1);
  s -= tnij(1, n, y - l + 1, y + l - 1);
  s -= 1;
  return s;
}
int main() {
  ios_base::sync_with_stdio(false);
  long long n, x, y, c;
  cin >> n >> x >> y >> c;
  long long s, e;
  s = 1;
  e = 6 * (long long)INF;
  long long best = -1;
  while (s <= e) {
    long long q = (s + e) / 2;
    long long p = area(n, x, y, q);
    if (p >= c) {
      best = q;
      e = q - 1;
    } else
      s = q + 1;
  }
  cout << best - 1 << endl;
  return 0;
}
