#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int, int>;
const int N = 1e5 + 20, inf = 1e9 + 20;
int n, m, s1, s2, x[N];
vector<int> vec;
int seg[N << 2];
void compress() {
  vec.push_back(s1);
  vec.push_back(s2);
  for (int i = 0; i < n; i++) vec.push_back(x[i]);
  sort(vec.begin(), vec.end());
  vec.resize(unique(vec.begin(), vec.end()) - vec.begin());
  s1 = lower_bound(vec.begin(), vec.end(), s1) - vec.begin();
  s2 = lower_bound(vec.begin(), vec.end(), s2) - vec.begin();
  for (int i = 0; i < n; i++) {
    x[i] = lower_bound(vec.begin(), vec.end(), x[i]) - vec.begin();
  }
  m = (int)vec.size();
}
inline void shift(int v) {
  if (!seg[v]) seg[(v << 1)] = seg[((v << 1) ^ 1)] = 0;
}
void add(int p, int v = 1, int s = 0, int e = m) {
  if (s + 1 == e) {
    seg[v]++;
    return;
  }
  shift(v);
  if (p < (s + e) >> 1)
    add(p, (v << 1), s, (s + e) >> 1);
  else
    add(p, ((v << 1) ^ 1), (s + e) >> 1, e);
  seg[v] = seg[(v << 1)] + seg[((v << 1) ^ 1)];
}
void emp(int l, int r, int v = 1, int s = 0, int e = m) {
  if (r <= s || e <= l) return;
  if (l <= s && e <= r) {
    seg[v] = 0;
    return;
  }
  shift(v);
  emp(l, r, (v << 1), s, (s + e) >> 1);
  emp(l, r, ((v << 1) ^ 1), (s + e) >> 1, e);
  seg[v] = seg[(v << 1)] + seg[((v << 1) ^ 1)];
}
int get(int l, int r, int v = 1, int s = 0, int e = m) {
  if (r <= s || e <= l) return 0;
  if (l <= s && e <= r) return seg[v];
  shift(v);
  return get(l, r, (v << 1), s, (s + e) >> 1) +
         get(l, r, ((v << 1) ^ 1), (s + e) >> 1, e);
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> s1 >> s2;
  for (int i = 0; i < n; i++) cin >> x[i];
  compress();
  int low = abs(vec[s2] - vec[s1]) - 1, high = inf;
  while (high - low > 1) {
    memset(seg, 0, sizeof seg);
    int d = (low + high) / 2;
    add(s1);
    for (int i = 0; i < n; i++) {
      int L = lower_bound(vec.begin(), vec.end(), vec[x[i]] - d) - vec.begin();
      int R = upper_bound(vec.begin(), vec.end(), vec[x[i]] + d) - vec.begin();
      if (get(0, m)) add((i ? x[i - 1] : s2));
      if (0 < L) emp(0, L);
      if (R < m) emp(R, m);
    }
    if (get(0, m))
      high = d;
    else
      low = d;
  }
  cout << high << '\n';
}
