public static void MainModule(TextReader In) { var lin = In.ReadLine().Split(' ').Select(n => int.Parse(n)).ToArray(); A = lin[0]; B = lin[1]; Q = lin[2]; var ss = new Treap <long>(); var ts = new Treap <long>(); var xs = new long[Q]; for (int i = 0; i < A; i++) { ss.Insert(long.Parse(In.ReadLine())); } for (int i = 0; i < B; i++) { ts.Insert(long.Parse(In.ReadLine())); } for (int i = 0; i < Q; i++) { xs[i] = long.Parse(In.ReadLine()); } const long SmallValue = -100000000000L; const long BigValue = 100000000000L; foreach (var x in xs) { var si = ss.FindIndex(x); var s0 = si <= 0 ? SmallValue : ss[si - 1]; var s1 = si >= A ? BigValue : ss[si]; var ti = ts.FindIndex(x); var t0 = ti <= 0 ? SmallValue : ts[ti - 1]; var t1 = ti >= B ? BigValue : ts[ti]; var s0t0 = Math.Max(x - s0, x - t0); var s0t1 = (x - s0) + (t1 - x) + Math.Min((x - s0), (t1 - x)); var s1t0 = (s1 - x) + (x - t0) + Math.Min((s1 - x), (x - t0)); var s1t1 = Math.Max(s1 - x, t1 - x); var can = new long[] { s0t0, s0t1, s1t0, s1t1, }; Console.WriteLine(can.Min()); } }