#include <bits/stdc++.h>
inline int read() {
  int data = 0, w = 1;
  char ch = getchar();
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') w = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') data = data * 10 + (ch ^ 48), ch = getchar();
  return data * w;
}
using ull = long long;
const int N(1e5 + 10);
int n, m, stk[N], top, c[N], f[N], g[N];
ull a[N], b[N], d[N], ans;
inline int find(ull x) { return std::lower_bound(b + 1, b + m + 1, x) - b; }
inline int lower(ull x) {
  return std::upper_bound(b + 1, b + m + 1, x) - b - 1;
}
void Add(int x, int i) {
  for (; x <= m; x += x & -x) c[x] = std::min(c[x], i);
}
int Min(int x) {
  int s = n + 2;
  for (; x; x -= x & -x) s = std::min(s, c[x]);
  return s;
}
int main() {
  n = read(), std::memset(c, 0x3f, sizeof c), a[n + 2] = 1e10;
  for (int i = 0; i <= n + 1; i++) a[i] = read();
  for (int i = 1; i <= n; i++) d[i] = read();
  for (int i = 1; i <= n; i++) {
    while (top && a[f[stk[top]]] + (d[stk[top]] << 1) < a[i]) --top;
    f[i] = stk[top];
    while (top && a[f[stk[top]]] + (d[stk[top]] << 1) <= a[f[i]] + (d[i] << 1))
      --top;
    stk[++top] = i;
  }
  stk[top = 0] = n + 1;
  for (int i = n; i; i--) {
    while (top && a[g[stk[top]]] - (d[stk[top]] << 1) > a[i]) --top;
    g[i] = stk[top];
    while (top && a[g[stk[top]]] - (d[stk[top]] << 1) >= a[g[i]] - (d[i] << 1))
      --top;
    stk[++top] = i;
  }
  for (int i = 1; i <= n; i++)
    if (a[g[i]] - a[f[i]] <= (d[i] << 1)) return puts("0"), 0;
  for (int i = 1; i <= n; i++)
    if (a[g[i]] - (d[i] << 1) < a[i]) b[++m] = a[g[i]] - (d[i] << 1);
  std::sort(b + 1, b + m + 1), m = std::unique(b + 1, b + m + 1) - b - 1,
                               ans = a[n + 1];
  for (int i = 1; i <= n; i++) ans = std::min(ans, a[g[i]] - a[f[i]]);
  for (int i = n; i >= 1; i--) {
    if (a[i] < a[f[i]] + (d[i] << 1))
      ans = std::min(ans, a[Min(lower(a[f[i]] + (d[i] << 1)))] - a[i]);
    if (a[g[i]] - (d[i] << 1) < a[i]) Add(find(a[g[i]] - (d[i] << 1)), i);
  }
  for (int i = 1; i <= n; i++) {
    if (!f[i] && a[g[i]] - a[i] < (d[i] << 1)) ans = std::min(ans, a[i]);
    if (g[i] == n + 1 && a[i] - a[f[i]] < (d[i] << 1))
      ans = std::min(ans, a[n + 1] - a[i]);
  }
  printf("%.1lf\n", ans * 0.5);
  return 0;
}
