#include <bits/stdc++.h>
using namespace std;
long long sum_max(long long x, long long pos, long long n) {
  return ((x + 1) * (n - 1) + x);
}
long long sum(long long l, long long r, long long n) {
  long long ans = (((l + r) * n) / 2);
  return ans;
}
long long sum_min(long long x, long long pos, long long n) {
  long long l = pos;
  long long r = n - pos;
  long long l1 = x;
  long long f1 = max(x - l + 1, 1ll);
  long long l2 = ((x > 1) ? (x - 1) : x);
  long long f2 = max(x - 1 - r + 1, 1ll);
  long long n1 = min(x, pos);
  long long n2 = min(x - 1, n - pos);
  long long left_s = ((pos == 1) ? x : (sum(f1, l1, n1)));
  long long right_s = ((n - pos == 1) ? (x - 1) : (sum(f2, l2, n2)));
  long long ans = left_s + right_s;
  if (pos > x && x != 1) {
    ans += pos - x;
  }
  if (n - pos > x - 1 && x != 1) {
    ans += n - pos - (x - 1);
  }
  return ans;
}
int main() {
  long long n, m, k;
  cin >> n >> m >> k;
  long long l = 1;
  long long r = 1000000000;
  long long ans = -1;
  while (l <= r) {
    long long mid = (l + r) / 2;
    if (sum_min(mid, k, n) <= m && sum_max(mid, k, n) >= m) {
      l = mid + 1;
      if (mid > ans) ans = mid;
    } else {
      if (sum_max(mid, k, n) < m)
        l = mid + 1;
      else if (sum_max(mid, k, n) >= m) {
        r = mid - 1;
      }
    }
  }
  cout << ans;
  return 0;
}
