import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; 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 seta = new TreeSet<>(); for (int i = 0; i < ka; i++) { seta.add(Integer.parseInt(sa[i])); } sa = br.readLine().split(" "); TreeSet setb = new TreeSet<>(); for (int i = 0; i < kb; i++) { setb.add(Integer.parseInt(sa[i])); } int q = Integer.parseInt(br.readLine()); int[] s = new int[q]; int[] t = new int[q]; for (int i = 0; i < q; i++) { sa = br.readLine().split(" "); s[i] = Integer.parseInt(sa[0]); t[i] = Integer.parseInt(sa[1]); } br.close(); int min = n; for (Integer e : seta) { min = Math.min(min, getDist(e, setb)); } PrintWriter pw = new PrintWriter(System.out); for (int i = 0; i < q; i++) { int ans = t[i] - s[i]; ans = Math.min(ans, getDist(s[i], seta) + getDist(t[i], seta)); ans = Math.min(ans, getDist(s[i], setb) + getDist(t[i], setb)); ans = Math.min(ans, getDist(s[i], seta) + getDist(t[i], setb) + min); ans = Math.min(ans, getDist(s[i], setb) + getDist(t[i], seta) + min); pw.println(ans); } pw.flush(); } static int getDist(int e, TreeSet set) { int min = 100000000; Integer l = set.floor(e); if (l != null) { min = Math.min(min, e - l); } Integer r = set.ceiling(e); if (r != null) { min = Math.min(min, r - e); } return min; } }