#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T read() {
  T r = 0, f = 0;
  char c;
  while (!isdigit(c = getchar())) f |= (c == '-');
  while (isdigit(c)) r = (r << 1) + (r << 3) + (c ^ 48), c = getchar();
  return f ? -r : r;
}
int n, m, top, ans, x[101101], d[101101], sta[101101], f[101101], g[101101],
    v[101101];
namespace BIT {
int c[101101];
inline void change(int k, int x) {
  for (; k > 0; k -= (k & (-k))) c[k] = max(c[k], x);
}
inline int ask(int k) {
  int Max = -1000000000;
  for (; k <= n; k += (k & (-k))) Max = max(Max, c[k]);
  return Max;
}
}  // namespace BIT
inline void change(int val, int x) {
  int k = lower_bound(v + 1, v + 1 + m, val) - v;
  BIT::change(k, x);
}
inline int ask(int val) {
  int k = lower_bound(v + 1, v + 1 + m, val) - v;
  return BIT::ask(k);
}
int main() {
  n = read<int>();
  for (int i = 0; i <= n + 1; i++) x[i] = read<int>();
  for (int i = 1; i <= n; i++) d[i] = read<int>();
  for (int i = 1; i <= n; i++) {
    while (top && x[i] - x[f[sta[top]]] > 2 * d[sta[top]]) top--;
    f[i] = sta[top];
    while (top && x[f[sta[top]]] + 2 * d[sta[top]] <= x[f[i]] + 2 * d[i]) top--;
    sta[++top] = i;
  }
  top = 0;
  sta[top] = n + 1;
  for (int i = n; i >= 1; i--) {
    while (top && x[g[sta[top]]] - x[i] > 2 * d[sta[top]]) top--;
    g[i] = sta[top];
    while (top && x[g[sta[top]]] - 2 * d[sta[top]] >= x[g[i]] - 2 * d[i]) top--;
    sta[++top] = i;
  }
  for (int i = 1; i <= n; i++)
    if (x[g[i]] - x[f[i]] <= 2 * d[i]) return puts("0"), 0;
  for (int i = 1; i <= n; i++)
    if (x[i] - x[f[i]] < 2 * d[i]) v[++m] = x[f[i]] + 2 * d[i];
  sort(v + 1, v + 1 + m);
  m = unique(v + 1, v + 1 + m) - v - 1;
  ans = x[n + 1];
  for (int i = 1; i <= n; i++) {
    if (f[i] < 1 && x[g[i]] - g[i] < 2 * d[i]) ans = min(ans, x[i]);
    if (g[i] > n && x[i] - x[f[i]] < 2 * d[i]) ans = min(ans, x[n + 1] - x[i]);
    ans = min(ans, x[g[i]] - x[f[i]]);
    if (x[g[i]] - x[i] < 2 * d[i])
      ans = min(ans, x[i] - ask(x[g[i]] - 2 * d[i]));
    if (x[i] - x[f[i]] < 2 * d[i]) change(x[f[i]] + 2 * d[i], x[i]);
  }
  printf("%.1lf\n", ans * 0.5);
  return 0;
}
