import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.TreeSet;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] sa = br.readLine().split(" ");
		int n = Integer.parseInt(sa[0]);
		int ka = Integer.parseInt(sa[1]);
		int kb = Integer.parseInt(sa[2]);
		sa = br.readLine().split(" ");
		TreeSet<Integer> seta = new TreeSet<>();
		for (int i = 0; i < ka; i++) {
			seta.add(Integer.parseInt(sa[i]));
		}
		sa = br.readLine().split(" ");
		TreeSet<Integer> setb = new TreeSet<>();
		for (int i = 0; i < kb; i++) {
			setb.add(Integer.parseInt(sa[i]));
		}

		setb.add(-10000000);
		setb.add(10000000);

		int min = n;
		for (int e : seta) {
			min = Math.min(min, getDist(e, setb));
		}

		seta.add(-10000000);
		seta.add(10000000);

		int q = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < q; i++) {
			sa = br.readLine().split(" ");
			int s = Integer.parseInt(sa[0]);
			int t = Integer.parseInt(sa[1]);
			int ans = t - s;
			ans = Math.min(ans, getDist(s, seta) + getDist(t, seta));
			ans = Math.min(ans, getDist(s, setb) + getDist(t, setb));
			ans = Math.min(ans, getDist(s, seta) + getDist(t, setb) + min);
			ans = Math.min(ans, getDist(s, setb) + getDist(t, seta) + min);
			sb.append(ans).append("\n");
		}
		br.close();

		System.out.print(sb.toString());
	}

	static int getDist(int e, TreeSet<Integer> set) {
		int min = 100000000;
		min = Math.min(min, e - set.floor(e));
		min = Math.min(min, set.ceiling(e) - e);
		return min;
	}
}