#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 79;
void answer(int val) {
  cout << (val / 2) << (val % 2 == 0 ? "\n" : ".5\n");
  exit(0);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  vector<int> x(n + 2), d(n + 2, 0);
  for (int i = 0; i < n + 2; i++) cin >> x[i];
  for (int i = 1; i < n + 1; i++) cin >> d[i], d[i] *= 2;
  vector<int> r(n + 2, -inf);
  vector<int> rs{0};
  r[0] = x[n + 1];
  vector<pair<int, int> > vl, vr;
  for (int i = 1; i < n + 1; i++) {
    while (r[rs.back()] < x[i]) rs.pop_back();
    if (x[rs.back()] + d[i] >= x[i]) {
      r[i] = x[rs.back()] + d[i];
      rs.push_back(i);
    }
  }
  vector<int> l(n + 2, inf);
  vector<int> ls{n + 1};
  l[n + 1] = x[0];
  for (int i = n; i >= 1; i--) {
    while (l[ls.back()] > x[i]) ls.pop_back();
    if (x[ls.back()] - d[i] <= x[i]) {
      l[i] = x[ls.back()] - d[i];
      ls.push_back(i);
    }
  }
  for (int i = 1; i <= n; i++)
    if (l[i] <= 0 || r[i] >= x[n + 1]) answer(0);
  for (int i = 0; i < n + 2; i++) {
    if (x[i] < r[i]) vr.push_back({r[i], i});
    if (l[i] < x[i]) vl.push_back({l[i], i});
  }
  sort(vr.begin(), vr.end());
  sort(vl.begin(), vl.end());
  int ans = x[n + 1] - x[0];
  int il = 0;
  set<int> idx;
  for (int i = 0; i < vr.size(); i++) {
    while (il < vl.size() && vl[il].first <= vr[i].first)
      idx.insert(vl[il++].second);
    auto it = idx.upper_bound(vr[i].second);
    if (it != idx.end()) ans = min(ans, x[*it] - x[vr[i].second]);
  }
  answer(ans);
  return 0;
}
