#include <bits/stdc++.h>
using namespace std;
double start_moment = 0;
double get_runtime() { return 1.0 * clock() / CLOCKS_PER_SEC; }
void reset_timer() { start_moment = get_runtime(); }
double timer_time() { return get_runtime() - start_moment; }
void runtime() { cout << fixed << setprecision(5) << get_runtime() << '\n'; }
template <class T>
void read(vector<T> &a, long long n) {
  T x;
  a.clear();
  for (long long i = 0; i < n; i++) {
    cin >> x;
    a.push_back(x);
  }
}
template <class T>
void write(vector<T> &a) {
  for (T x : a) cout << x << ' ';
  cout << '\n';
}
int a[6];
int n;
vector<int> b;
vector<pair<int, int> > v;
int main() {
  ios_base::sync_with_stdio(0);
  for (int i = 0; i < 6; i++) {
    cin >> a[i];
  }
  cin >> n;
  read(b, n);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < 6; j++) {
      v.push_back(make_pair(b[i] - a[j], i));
    }
  }
  sort(v.begin(), v.end());
  set<int> st;
  map<int, int> cnt;
  int res = 2000000009;
  int p = 0;
  for (int i = 0; i < v.size(); i++) {
    while (p < v.size() && st.size() != n) {
      if (cnt[v[p].second] == 0) {
        st.insert(v[p].second);
      }
      cnt[v[p].second]++;
      p++;
    }
    if (st.size() == n) {
      res = min(res, v[p - 1].first - v[i].first);
    }
    cnt[v[i].second]--;
    if (cnt[v[i].second] == 0) {
      st.erase(v[i].second);
    }
  }
  cout << res;
}
