#include <bits/stdc++.h>
using namespace std;
inline int getint() {
  int num = 0;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    ;
  for (; isdigit(ch); ch = getchar()) num = num * 10 + ch - '0';
  return num;
}
typedef int arr[2000010];
pair<int, int> st[2000010];
arr L, R, x, d;
int n, tp, ans;
int main() {
  n = getint();
  for (int i = 0; i < n + 2; i++) x[i] = getint();
  for (int i = 1; i <= n; i++) d[i] = getint();
  R[0] = x[n + 1];
  st[tp = 1] = make_pair(R[0], 0);
  for (int i = 1; i <= n; i++) {
    while (st[tp].first < x[i]) tp--;
    if (x[st[tp].second] + 2 * d[i] <= x[i])
      R[i] = 0;
    else {
      R[i] = 2 * d[i] + x[st[tp].second];
      while (tp && st[tp].first <= R[i]) tp--;
      st[++tp] = make_pair(R[i], i);
    }
  }
  L[n + 1] = x[0];
  st[tp = 1] = make_pair(L[n + 1], n + 1);
  for (int i = n; i > 0; i--) {
    while (st[tp].first > x[i]) tp--;
    if (x[st[tp].second] - 2 * d[i] >= x[i])
      L[i] = x[n + 1];
    else {
      L[i] = x[st[tp].second] - 2 * d[i];
      while (tp && st[tp].first >= L[i]) tp--;
      st[++tp] = make_pair(L[i], i);
    }
  }
  int ans = x[n + 1] - x[0];
  for (int i = 1; i <= n; i++)
    if (R[i] >= x[n + 1]) return printf("0\n"), 0;
  for (int i = 1; i <= n; i++)
    if (R[i] > x[i]) ans = min(ans, x[n + 1] - x[i]);
  for (int i = 1; i <= n; i++)
    if (L[i] < x[i]) ans = min(ans, x[i] - x[0]);
  tp = 0;
  for (int i = n; i > 0; i--) {
    if (R[i] > x[i]) {
      int l = 1, r = tp;
      for (int mid; mid = (l + r) >> 1, l <= r;)
        if (st[mid].first <= R[i])
          l = mid + 1;
        else
          r = mid - 1;
      if (l > 1) ans = min(ans, x[st[l - 1].second] - x[i]);
    }
    if (L[i] < x[i]) {
      while (tp && st[tp].first >= L[i]) tp--;
      st[++tp] = make_pair(L[i], i);
    }
  }
  return printf("%lf", (double)1.0 * ans / 2), 0;
}
