#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 100;
long long n, x[N], d[N], f[N], g[N], arr[N], id1[N], id2[N], ans;
vector<long long> vec[N];
priority_queue<long long> Q1, Q2;
void mdf(long long x, long long val) {
  while (x <= n + 2) arr[x] = max(arr[x], val), x += (x & -x);
}
long long qry(long long x) {
  long long res = -1;
  while (x) res = max(res, arr[x]), x -= (x & -x);
  return res;
}
bool cmpf(long long x, long long y) { return f[x] > f[y]; }
bool cmpg(long long x, long long y) { return g[x] > g[y]; }
signed main() {
  cin >> n;
  for (long long i = 1; i <= n + 2; ++i) cin >> x[i], id1[i] = id2[i] = i;
  for (long long i = 1; i <= n + 10; ++i) f[i] = -1e18, g[i] = 1e18;
  for (long long i = 2; i <= n + 1; ++i) cin >> d[i];
  d[1] = d[n + 2] = 1e9, f[1] = 1e9;
  Q1.push(x[1]);
  for (long long i = 2; i <= n + 2; ++i) {
    for (auto t : vec[i]) Q2.push(t);
    while (!Q2.empty() && Q1.top() == Q2.top()) Q1.pop(), Q2.pop();
    if (!Q1.empty()) f[i] = Q1.top() + 2 * d[i];
    long long pos = lower_bound(x + 1, x + n + 3, f[i] + 1) - x;
    if (pos > i) vec[pos].push_back(x[i]), Q1.push(x[i]);
    if (i != n + 2 && f[i] >= x[n + 2]) puts("0"), exit(0);
  }
  for (long long i = 0; i <= n + 3; ++i) vec[i].clear();
  while (!Q1.empty()) Q1.pop();
  while (!Q2.empty()) Q2.pop();
  g[n + 2] = 0, Q1.push(-x[n + 2]);
  for (long long i = n + 1; i; --i) {
    for (auto t : vec[i]) Q2.push(t);
    while (!Q2.empty() && Q1.top() == Q2.top()) Q1.pop(), Q2.pop();
    if (!Q1.empty()) g[i] = -Q1.top() - 2 * d[i];
    long long pos = lower_bound(x + 1, x + n + 3, g[i]) - x;
    --pos;
    if (pos < i) vec[pos].push_back(-x[i]), Q1.push(-x[i]);
  }
  for (long long i = 0; i <= n + 3; ++i) vec[i].clear();
  for (long long i = 1; i <= n + 3; ++i) arr[i] = -1;
  sort(id1 + 1, id1 + n + 3, cmpf);
  sort(id2 + 1, id2 + n + 3, cmpg);
  ans = 2e9;
  for (long long i = 1, j = 1; i <= n + 2; ++i) {
    while (f[id1[j]] >= g[id2[i]] && j <= n + 2) {
      if (f[id1[j]] > x[id1[j]]) mdf(id1[j], x[id1[j]]);
      ++j;
    }
    long long now = id2[i];
    if (g[now] >= x[now]) continue;
    long long t = qry(now - 1);
    if (~t) ans = min(ans, x[now] - t);
  }
  cout << fixed << setprecision(5) << ans / 2.0 << endl;
  return 0;
}
