#include <bits/stdc++.h>
using namespace std;
struct $ {
  $() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
  }
} $;
int n;
const int64_t inf = 0x3f3f3f3f3f3f3f3fLL;
deque<tuple<int64_t, int64_t>> solve(const vector<int64_t> &x,
                                     const vector<int64_t> &d) {
  deque<tuple<int64_t, int64_t>> res{make_tuple(inf, 0)};
  deque<tuple<int64_t, int64_t>> cur{make_tuple(inf, 0)};
  for (int i = 1; i <= n; ++i) {
    while (get<0>(cur.back()) < x[i]) cur.pop_back();
    int64_t to = get<1>(cur.back()) + 2 * d[i];
    if (to <= x[i]) continue;
    while (get<0>(cur.back()) <= to) cur.pop_back();
    cur.emplace_back(to, x[i]);
    while (!res.empty() && get<0>(res.back()) <= to) res.pop_back();
    res.emplace_back(to, x[i]);
  }
  return res;
}
int main() {
  cin >> n;
  vector<int64_t> x(n + 2), d(n + 2);
  for (int i = 0; i < n + 2; ++i) cin >> x[i];
  for (int i = 1; i <= n; ++i) cin >> d[i];
  deque<tuple<int64_t, int64_t>> resl = solve(x, d);
  vector<int64_t> xr(x.size());
  for (int i = 0; i < n + 2; ++i) xr[i] = x.back() - x[n + 1 - i];
  vector<int64_t> dr(d.rbegin(), d.rend());
  deque<tuple<int64_t, int64_t>> resr = solve(xr, dr);
  for (auto vl : resl)
    ;
  ;
  for (auto vr : resr)
    ;
  ;
  int64_t ans = inf;
  auto rit = resr.rbegin();
  for (auto lit = resl.begin(); lit != resl.end(); ++lit) {
    for (; rit != resr.rend(); ++rit) {
      int64_t overlap = get<0>(*lit) + get<0>(*rit) - x.back();
      int64_t dur = x.back() - get<1>(*lit) - get<1>(*rit);
      ;
      ;
      if (dur <= 0) continue;
      if (get<0>(*lit) + get<1>(*rit) >= x.back() &&
          get<0>(*rit) + get<1>(*lit) >= x.back()) {
        if (lit == resl.begin() && next(rit) == resr.rend())
          ans = min(ans, x.back());
        else
          ans = min(ans, int64_t(0));
      }
      if (overlap >= 0) {
        ans = min(ans, max(dur, int64_t(0)));
        break;
      }
    }
  }
  assert(ans < inf);
  cout << (double(ans) / 2) << "\n";
  return 0;
}
