void main(){
  import std.stdio, std.string, std.conv, std.algorithm;
  import std.math, std.typecons;

  int n, z, w; rd(n, z, w);
  auto a=readln.split.to!(int[]);

  auto mm=new int[][](n, 2);
  foreach(i; 0..n) fill(mm[i], -1);
  int f(int i, int t, int x, int y){
    if(i==n) return (x-y).abs;
    if(mm[i][t]>=0) return mm[i][t];
    int ret;
    if(t){
      ret=-1;
      foreach(j; i..n) ret=max(ret, f(j+1, t^1, a[j], y));
    }else{
      ret=1_000_000_000+1;
      foreach(j; i..n) ret=min(ret, f(j+1, t^1, x, a[j]));
    }
    return mm[i][t]=ret;
  }

  writeln(f(0, 1, z, w));
}

void rd(T...)(ref T x){
  import std.stdio, std.string, std.conv;
  auto l=readln.split;
  assert(l.length==x.length);
  foreach(i, ref e; x){
    e=l[i].to!(typeof(e));
  }
}