#include <bits/stdc++.h>
using namespace std;
const int maxN = 2e5 + 10;
const long long INF = 1e15;
int n;
int L[maxN + 1], R[maxN + 1];
int stk[maxN + 1], top;
long long a[maxN + 1], d[maxN + 1], val[maxN + 1];
int main() {
  scanf("%d", &n);
  for (int i = 0; i <= n + 1; i++) scanf("%lld", &a[i]);
  for (int i = 1; i <= n; i++) scanf("%lld", &d[i]), d[i] *= 2;
  stk[top = 1] = 0;
  for (int i = 1; i <= n; i++) {
    while (top > 1 && d[stk[top]] < a[i] - a[L[stk[top]]]) top--;
    if (a[i] - a[stk[top]] <= d[i])
      L[i] = stk[top], stk[++top] = i;
    else
      L[i] = -1;
  }
  stk[top = 1] = n + 1;
  for (int i = n; i >= 1; i--) {
    while (top > 1 && d[stk[top]] < a[R[stk[top]]] - a[i]) top--;
    if (a[stk[top]] - a[i] <= d[i])
      R[i] = stk[top], stk[++top] = i;
    else
      R[i] = -1;
  }
  for (int i = 1; i <= n; i++) {
    if (L[i] < 0 || R[i] < 0) continue;
    if (a[R[i]] - a[L[i]] <= d[i]) return puts("0"), 0;
  }
  long long ans = INF;
  top = 1;
  stk[1] = n + 1;
  val[1] = -INF;
  for (int i = n; i >= 0; i--) {
    if (L[i] != -1) {
      long long now = d[i] + a[L[i]];
      if (!i) now = INF;
      if (now <= a[i]) continue;
      int x = upper_bound(val + 1, val + top + 1, now) - val - 1;
      ans = min(ans, a[stk[x]] - a[i]);
    }
    if (R[i] != -1) {
      long long now = a[R[i]] - d[i];
      if (!i || now >= a[i]) continue;
      while (top && now <= val[top]) top--;
      top++;
      stk[top] = i;
      val[top] = now;
    }
  }
  printf("%lf\n", (double)(ans) / 2.0);
  return 0;
}
