# -*- coding: utf-8 -*-



"""

参考：https://kimiyuki.net/writeup/algo/atcoder/arc-085-d/

　　　https://atcoder.jp/contests/abc078/submissions/3854338

・ミニマックス法

・メモ化再帰

・メモの持ち方をシンプルにした版

"""



import sys

from collections import defaultdict



# 再帰呼び出しの回数制限(デフォルト1000)

sys.setrecursionlimit(10 ** 9)

 

N, Z, W = list(map(int, input().split()))

aN = list(map(int, input().split()))



# メモ[手番][残り山札数] = このルートでのmax,min

memo = [[0] * (N+1) for _ in range(2)]



def dfs(turn, rest, x, y):

    if rest == 0:

        return abs(x - y)

    # 先手番

    if turn % 2 == 0:

        # 既に見た局面ならメモの内容を返す

        if memo[0][rest]: 

            return memo[0][rest]

        mx = -1

        for i in range(N-rest, N):

            x = aN[i]

            idx = i+1

            mx = max(dfs(turn+1, N-idx, x, y), mx)

        # ここより深い所を探し終わったので結果をメモする

        memo[0][rest] = mx

        return mx

    # 後手番

    else:

        if memo[1][rest]: 

            return memo[1][rest]

        mn = float('inf')

        for i in range(N-rest, N):

            y = aN[i]

            idx = i+1

            mn = min(dfs(turn+1, N-idx, x, y), mn)

        memo[1][rest] = mn

        return mn



print((dfs(0, N, Z, W)))

# -*- coding: utf-8 -*-



"""

参考：https://img.atcoder.jp/arc085/editorial.pdf

・公式解、O(1)の一発解法

・思いつけばいいけど、そういつも上手くいかないよね…。

"""

 

N, Z, W = list(map(int, input().split()))

aN = list(map(int, input().split()))



if N == 1:

    print((abs(aN[0] - W)))

else:

    # Xが最後まで引くか、最後から2番目まで引くか

    print((max(abs(aN[-1] - W), abs(aN[-2] - aN[-1]))))

# -*- coding: utf-8 -*-
"""
参考：https://kimiyuki.net/writeup/algo/atcoder/arc-085-d/
　　　https://atcoder.jp/contests/abc078/submissions/3854338
・ミニマックス法
・メモ化再帰
・メモの持ち方をシンプルにした版
"""
import sys
from collections import defaultdict

# 再帰呼び出しの回数制限(デフォルト1000)
sys.setrecursionlimit(10**9)
N, Z, W = list(map(int, input().split()))
aN = list(map(int, input().split()))
# メモ[手番][残り山札数] = このルートでのmax,min
memo = [[0] * (N + 1) for _ in range(2)]


def dfs(turn, rest, x, y):
    if rest == 0:
        return abs(x - y)
    # 先手番
    if turn % 2 == 0:
        # 既に見た局面ならメモの内容を返す
        if memo[0][rest]:
            return memo[0][rest]
        mx = -1
        for i in range(N - rest, N):
            x = aN[i]
            idx = i + 1
            mx = max(dfs(turn + 1, N - idx, x, y), mx)
        # ここより深い所を探し終わったので結果をメモする
        memo[0][rest] = mx
        return mx
    # 後手番
    else:
        if memo[1][rest]:
            return memo[1][rest]
        mn = float("inf")
        for i in range(N - rest, N):
            y = aN[i]
            idx = i + 1
            mn = min(dfs(turn + 1, N - idx, x, y), mn)
        memo[1][rest] = mn
        return mn


print((dfs(0, N, Z, W)))

# -*- coding: utf-8 -*-
"""
参考：https://img.atcoder.jp/arc085/editorial.pdf
・公式解、O(1)の一発解法
・思いつけばいいけど、そういつも上手くいかないよね…。
"""
N, Z, W = list(map(int, input().split()))
aN = list(map(int, input().split()))
if N == 1:
    print((abs(aN[0] - W)))
else:
    # Xが最後まで引くか、最後から2番目まで引くか
    print((max(abs(aN[-1] - W), abs(aN[-2] - aN[-1]))))

-参考：https://kimiyuki.net/writeup/algo/atcoder/arc-085-d/ -　　　https://atcoder.jp/contests/abc078/submissions/3854338 -・ミニマックス法 -・メモ化再帰 -・メモの持ち方をシンプルにした版 +参考：https://img.atcoder.jp/arc085/editorial.pdf +・公式解、O(1)の一発解法 +・思いつけばいいけど、そういつも上手くいかないよね…。 -import sys -from collections import defaultdict - -# 再帰呼び出しの回数制限(デフォルト1000) -sys.setrecursionlimit(10**9) -# メモ[手番][残り山札数] = このルートでのmax,min -memo = [[0] * (N + 1) for _ in range(2)] - - -def dfs(turn, rest, x, y): -    if rest == 0: -        return abs(x - y) -    # 先手番 -    if turn % 2 == 0: -        # 既に見た局面ならメモの内容を返す -        if memo[0][rest]: -            return memo[0][rest] -        mx = -1 -        for i in range(N - rest, N): -            x = aN[i] -            idx = i + 1 -            mx = max(dfs(turn + 1, N - idx, x, y), mx) -        # ここより深い所を探し終わったので結果をメモする -        memo[0][rest] = mx -        return mx -    # 後手番 -    else: -        if memo[1][rest]: -            return memo[1][rest] -        mn = float("inf") -        for i in range(N - rest, N): -            y = aN[i] -            idx = i + 1 -            mn = min(dfs(turn + 1, N - idx, x, y), mn) -        memo[1][rest] = mn -        return mn - - -print((dfs(0, N, Z, W))) +if N == 1: +    print((abs(aN[0] - W))) +else: +    # Xが最後まで引くか、最後から2番目まで引くか +    print((max(abs(aN[-1] - W), abs(aN[-2] - aN[-1]))))