#include #include #include #include #include using namespace std; using ll = long long; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N, Ka, Kb; cin >> N >> Ka >> Kb; vector A(Ka), B(Kb); for (int i = 0; i < Ka; i++){ cin >> A[i]; } for (int i = 0; i < Kb; i++){ cin >> B[i]; } int Q; cin >> Q; const ll inf = 100000000000000000000LL / 1000; // 10^20 (adjusted for LL) ll a2b = inf; // AとB間の最小差分を計算 for (auto a : A) { auto it = lower_bound(B.begin(), B.end(), a); if (it != B.end()){ a2b = min(a2b, *it - a); } if (it != B.begin()){ it--; a2b = min(a2b, a - *it); } } // 二分探索で与えた値に最も近い値との距離を返す関数 auto dist = [&](const vector& arr, ll a) -> ll { ll res = inf; auto it = lower_bound(arr.begin(), arr.end(), a); if (it != arr.end()){ res = min(res, *it - a); } if (it != arr.begin()){ it--; res = min(res, a - *it); } return res; }; // 各クエリに対する計算 while (Q--) { ll s, t; cin >> s >> t; ll s2a = dist(A, s); ll s2b = dist(B, s); ll t2a = dist(A, t); ll t2b = dist(B, t); ll ans = min({ abs(t - s), s2a + t2a, s2b + t2b, s2a + a2b + t2b, s2b + a2b + t2a }); cout << ans << "\n"; } return 0; }