using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace abc119d
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                Console.SetIn(new StreamReader(args[0]));
            }

            new Program().Solve();
        }

        void Solve()
        {
            var temp = Console.ReadLine().Split(' ').Select(long.Parse).ToArray();
            var a = temp[0];
            var b = temp[1];
            var q = temp[2];
            var s = new long[a];
            var t = new long[b];
            var x = new long[q];

            for (int i = 0; i < a; i++)
            {
                s[i] = long.Parse(Console.ReadLine());
            }

            for (int i = 0; i < b; i++)
            {
                t[i] = long.Parse(Console.ReadLine());
            }

            Console.Error.WriteLine("A:" + string.Join(",", s));
            Console.Error.WriteLine("B:" + string.Join(",", t));

            for (int i = 1; i <= q; i++)
            {
                var start = long.Parse(Console.ReadLine());
                Console.Error.WriteLine("Q" + i + ":" + start);
                var distanceList = new List<long>();

                distanceList.Add(GetDistance(s, t, start, 0, 0));
                distanceList.Add(GetDistance(s, t, start, 0, 1));
                distanceList.Add(GetDistance(s, t, start, 1, 0));
                distanceList.Add(GetDistance(s, t, start, 1, 1));
                distanceList.Add(GetDistance(t, s, start, 0, 0));
                distanceList.Add(GetDistance(t, s, start, 0, 1));
                distanceList.Add(GetDistance(t, s, start, 1, 0));
                distanceList.Add(GetDistance(t, s, start, 1, 1));

                // distanceList.Add(GetDistance2(s, t, start));
                // distanceList.Add(GetDistance2(t, s, start));

                Console.WriteLine(distanceList.Min());
            }
        }

        // array1: 最初に訪れる寺社の位置リスト
        // array2: 次に訪れる寺社の位置リスト
        // start: 出発地点
        // direction1: 最初に向かう方向(0:西、1:東)
        // direction2: 次に向かう方向(0:西、1:東)
        long GetDistance(long[] array1, long[] array2, long start, int direction1, int direction2)
        {
            var distance = long.MaxValue;
            var index1 = GetIndex(array1, start) + direction1;

            if (0 <= index1 && index1 < array1.Length)
            {
                distance = Math.Abs(array1[index1] - start);
                var index2 = GetIndex(array2, array1[index1]) + direction2;

                if (0 <= index2 && index2 < array2.Length)
                {
                    distance += Math.Abs(array2[index2] - array1[index1]);
                }
                else
                {
                    distance = long.MaxValue;
                }
            }
            else
            {
                distance = long.MaxValue;
            }

            // Console.Error.WriteLine("distance:" + distance);
            return distance;
        }

        // direction1、direction2をメソッド内で処理する版
        long GetDistance2(long[] array1, long[] array2, long start)
        {
            var distance00 = long.MaxValue; // 西、西
            var distance01 = long.MaxValue; // 西、東
            var distance10 = long.MaxValue; // 東、西
            var distance11 = long.MaxValue; // 東、東
            var index1 = GetIndex(array1, start);

            if (0 <= index1)
            {
                // 西
                distance00 = Math.Abs(array1[index1] - start);
                distance01 = distance00;
                var index2 = GetIndex(array2, array1[index1]);

                if (0 <= index2)
                {
                    // 西、西
                    distance00 += Math.Abs(array2[index2] - array1[index1]);
                }
                else
                {
                    distance00 = long.MaxValue;
                }

                if (index2 < array2.Length - 1)
                {
                    // 西、東
                    distance01 += Math.Abs(array2[index2 + 1] - array1[index1]);
                }
                else
                {
                    distance01 = long.MaxValue;
                }
            }

            if (index1 < array1.Length - 1)
            {
                // 東
                distance10 = Math.Abs(array1[index1 + 1] - start);
                distance11 = distance10;
                var index2 = GetIndex(array2, array1[index1 + 1]);

                if (0 <= index2)
                {
                    // 東、西
                    distance10 += Math.Abs(array2[index2] - array1[index1 + 1]);
                }
                else
                {
                    distance10 = long.MaxValue;
                }

                if (index2 < array2.Length - 1)
                {
                    // 東、東
                    distance11 += Math.Abs(array2[index2 + 1] - array1[index1 + 1]);
                }
                else
                {
                    distance11 = long.MaxValue;
                }
            }

            return new List<long>{ distance00, distance01, distance10, distance11 }.Min();
        }

        // array[index] <= value < array[index + 1]となるindexを返す
        int GetIndex(long[] array, long value)
        {
            var min = -1;
            var max = array.Length - 1;
            var index = (max - min) / 2 + min;

            while (0 <= index && index < array.Length - 1)
            {
                // Console.Error.WriteLine("min:" + min + ",max:" + max + ",index:" + index + ",value:" + array[index]);

                if (value < array[index])
                {
                    max = index;
                }
                else if (array[index + 1] <= value)
                {
                    min = index + 1;
                }
                else
                {
                    break;
                }

                index = (max - min) / 2 + min;
            }

            return index;
        }
    }
}


Measured memory_bytes: 32848