using System;
using System.Linq;

namespace D
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] In = Console.ReadLine().Split(' ').Select(x => int.Parse(x)).ToArray();
            int a = In[0];
            int b = In[1];
            int q = In[2];
            long[] S = new long[a];
            long[] T = new long[b];
            long[] 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());
            }
            for(int i = 0; i < q; i++)
            {
                X[i] = long.Parse(Console.ReadLine());
            }
            for(int m=0;m<q; m++)
            {
                long[] A, B;
                long min = long.MaxValue;
                for(int i=0; i < 2; i++)
                {
                    int aa, bb;
                    if (i == 0) { A = S;aa = a; B = T;bb = b; }
                    else { A = T;aa = b; B = S; bb = a; }
                    for(int j = 0; j < 2; j++)
                    {
                        int apos = Binary(X[m], A) + j;//j=0,1で境界の左右をとれる
                        if (apos < 0 || aa <= apos) continue;
                        long ax = A[apos];
                        for(int k = 0; k < 2; k++)
                        {
                            int bpos = Binary(ax, B) + k;
                            if (bpos <0 || bb<=bpos) continue;
                            long bx = B[bpos];
                            long d = (long)Math.Abs(X[m] - ax) + (long)Math.Abs(ax - bx);
                            min = (long)Math.Min(min, d);
                        }
                    }
                }
                Console.WriteLine(min);
            }
            
        }
        static int Binary(long key,long[] A)
        {
            int left = -1;
            int right = A.Length;
            while (right - left > 1)
            {
                int mid= left + (right - left) / 2;
                if (isOk(mid, key, A)) right = mid;
                else left = mid;
            }
            return left;
        }
        static bool isOk(int idx, long key, long[] A)
        {
            if (A[idx] >= key) return true;
            return false;
        }
    }
}
//もうちょいうまい場合分けがある
//for(int i = 0; i<q; i++)
//            {
//                long x = X[i];
//var s = Binary(x, S);
//var t = Binary(x, T);
//long smin = 1001001001;
//long tmin = 1001001001;
////一番近いのは
//long now = x;
//                if (s == 0) smin = S[s];
//                else if (s == a) smin = S[a - 1];
//                else
//                {
//                    smin = (long) Math.Min(S[s] - x, x - S[s - 1]);
//                }
//                if (t == 0) smin = T[t];
//                else if (t == a) smin = T[b - 1];
//                else
//                {

//                    tmin = (long) Math.Min(T[t] - x, x - T[t - 1]);
//                }
//                //二番目に近いのは
//                if (smin<tmin)
//                {
//                    tmin = (long) Math.Min(T[t] - smin, smin - T[t - 1]);
//                }
//                else if (smin > tmin)
//                {
//                    smin = (long) Math.Min(S[s] - tmin, tmin - S[s - 1]);
//                }
//                else if (smin == tmin)
//                {

//                }
//            }


Measured memory_bytes: 49076