#include <bits/stdc++.h>
using namespace std;
const int INF = 5e8, N = 2e5 + 500;
int x[N], d[N], q[N], l[N], r[N], top, n;
int find(int r, int w) {
  int L = 0, mid;
  while (L < r) {
    mid = (L + r + 1) >> 1;
    if (2ll * d[q[mid]] + l[q[mid]] >= w)
      L = mid;
    else
      r = mid - 1;
  }
  return L;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i <= n + 1; i++) scanf("%d", x + i);
  for (int i = 1; i <= n; i++) scanf("%d", d + i);
  d[0] = d[n + 1] = INF;
  int top = 0;
  for (int i = 1; i <= n + 1; i++) {
    while (top && 2ll * d[q[top]] + l[q[top]] < x[i]) --top;
    l[i] = x[q[top]];
    q[++top] = i;
  }
  if (top > 1) {
    puts("0");
    return 0;
  }
  top = 0;
  q[0] = n + 1;
  for (int i = n; i >= 1; i--) {
    while (top && r[q[top]] - 2 * d[q[top]] > x[i]) --top;
    r[i] = x[q[top]];
    q[++top] = i;
  }
  top = 0;
  q[top] = 0;
  int ans = 1e9;
  for (int i = 1; i <= n + 1; i++) {
    if (x[i] > r[i] - 2 * d[i]) {
      int j = find(top, r[i] - 2 * d[i]);
      ans = min(ans, x[i] - x[q[j]]);
    }
    if (x[i] >= l[i] + 2 * d[i]) continue;
    while (top && 2ll * d[i] + l[i] >= 2ll * d[q[top]] + l[q[top]]) --top;
    q[++top] = i;
  }
  printf("%.1lf\n", ans / 2.);
}
