/**
 *    author:  tourist
 *    created: 11.03.2024 10:54:41
**/
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int tt;
  cin >> tt;
  while (tt--) {
    int n, m, k;
    cin >> n >> m >> k;
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
      cin >> a[i];
    }
    vector<int> x(m);
    for (int i = 0; i < m; i++) {
      cin >> x[i];
    }
    vector<int> y(k);
    for (int i = 0; i < k; i++) {
      cin >> y[i];
    }
    sort(x.begin(), x.end());
    sort(y.begin(), y.end());
    vector<int> diff(n - 1);
    for (int i = 0; i < n - 1; i++) {
      diff[i] = a[i + 1] - a[i];
    }
    vector<int> order(n - 1);
    iota(order.begin(), order.end(), 0);
    sort(order.begin(), order.end(), [&](int i, int j) {
      return diff[i] > diff[j];
    });
    int at_least = (n > 2 ? diff[order[1]] : 0);
    int l = a[order[0]];
    int r = a[order[0] + 1];
    int mid = l + (r - l + 1) / 2;
    int ans = diff[order[0]];
    auto Test = [&](int i, int j) {
      int s = x[i] + y[j];
      if (s > l && s < r) {
        ans = min(ans, max({r - s, s - l, at_least}));
      }
    };
    int j = k - 1;
    for (int i = 0; i < m; i++) {
      while (j > 0 && x[i] + y[j - 1] >= mid) {
        j -= 1;
      }
      Test(i, j);
      if (j > 0) {
        Test(i, j - 1);
      }
    }
    cout << ans << '\n';
  }
  return 0;
}
