#include <bits/stdc++.h>
using namespace std;
int N, A[200015], X[200015], Y[200015], F[200015];
long long B[200015], D[200015];
void Add(int x, int k) {
  for (x = *B - x + 1; x <= *B; x += x & -x) F[x] = max(F[x], k);
}
int Ask(int x) {
  int ret = 0;
  for (x = *B - x + 1; x; x -= x & -x) ret = max(ret, F[x]);
  return ret;
}
int main() {
  scanf("%d", &N);
  N += 2;
  for (int i = 1; i <= N; i++) scanf("%d", &A[i]);
  for (int i = 2; i <= N - 1; i++) scanf("%I64d", &D[i]);
  D[1] = D[N] = (1ll << 40);
  X[1] = X[2] = 1;
  Y[N - 1] = Y[N] = N;
  for (int i = 3; i <= N; i++) {
    int j = i - 1;
    for (; j > 1 && A[i] - A[X[j]] > D[j] * 2;) j = X[j];
    X[i] = j;
  }
  for (int i = N - 2; i >= 1; i--) {
    int j = i + 1;
    for (; j < N && A[Y[j]] - A[i] > D[j] * 2;) j = Y[j];
    Y[i] = j;
  }
  for (int i = 2; i <= N - 1; i++)
    if (Y[X[i]] == i && X[Y[i]] == i) return puts("0"), 0;
  for (int i = 1; i <= N; i++) X[i] = A[i] - A[X[i]], Y[i] = A[Y[i]] - A[i];
  for (int i = 1; i <= N; i++)
    B[++*B] = D[i] * 2 + A[i] - X[i], B[++*B] = -D[i] * 2 + A[i] + Y[i];
  sort(B + 1, B + *B + 1);
  *B = unique(B + 1, B + *B + 1) - B - 1;
  for (int i = 0; i <= *B; i++) F[i] = -(1 << 30);
  int Ans = 1 << 30;
  for (int i = 2; i <= N; i++) {
    if (2 * D[i - 1] > X[i - 1]) {
      int t =
          lower_bound(B + 1, B + *B + 1, D[i - 1] * 2 + A[i - 1] - X[i - 1]) -
          B;
      Add(t, A[i - 1]);
    }
    if (2 * D[i] > Y[i]) {
      int t = lower_bound(B + 1, B + *B + 1, -D[i] * 2 + A[i] + Y[i]) - B;
      Ans = min(1ll * Ans, 1ll * A[i] - Ask(t));
    }
  }
  printf("%.6lf\n", Ans * .5);
}
