#include <bits/stdc++.h>
using namespace std;
long long power(long long x, long long y, long long mod) {
  if (y < 0) return power(power(x, mod - 2, mod), -y, mod);
  long long res = 1;
  for (; y; y >>= 1, x = x * x % mod)
    if (y & 1) res = res * x % mod;
  return res;
}
const int nn = 1e5 + 10;
int x[nn], d[nn], L[nn], R[nn], q[nn], pre[nn];
int N;
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[i] *= 2;
  int cnt = 1;
  q[1] = 0;
  R[0] = x[N + 1];
  for (int i = 1; i <= N; ++i) {
    int l = 1, r = cnt, mid;
    while (l + 1 < r) {
      mid = l + r >> 1;
      if (R[q[mid]] >= x[i])
        l = mid;
      else
        r = mid - 1;
    }
    if (l < cnt && R[q[l + 1]] >= x[i]) l++;
    if (R[q[l]] < x[i]) continue;
    R[i] = x[q[l]] + d[i];
    pre[i] = x[i] - x[q[l]];
    if (R[i] <= x[i]) continue;
    while (cnt && R[q[cnt]] <= R[i]) cnt--;
    q[++cnt] = i;
  }
  cnt = 1;
  q[1] = N + 1;
  L[N + 1] = 0;
  for (int i = N; i; --i) {
    int l = 1, r = cnt, mid;
    while (l + 1 < r) {
      mid = l + r >> 1;
      if (L[q[mid]] <= x[i])
        l = mid;
      else
        r = mid - 1;
    }
    if (l < cnt && L[q[l + 1]] <= x[i]) l++;
    if (L[q[l]] > x[i]) continue;
    L[i] = x[q[l]] - d[i];
    if (L[i] >= x[i]) continue;
    while (cnt && L[q[cnt]] >= L[i]) cnt--;
    q[++cnt] = i;
  }
  int res = 2e9;
  for (int i = 0; i <= N; ++i) {
    if (i && R[i] >= x[N + 1]) res = 0;
    if (R[i] <= x[i]) continue;
    int l = 1, r = cnt, mid;
    while (l + 1 < r) {
      mid = l + r >> 1;
      if (L[q[mid]] <= R[i])
        l = mid;
      else
        r = mid - 1;
    }
    if (l < cnt && L[q[l + 1]] <= R[i]) l++;
    if (x[q[l]] > x[i]) {
      res = min(res, x[q[l]] - x[i]);
    }
  }
  printf("%.10f\n", res / 2.);
}
