#input of int(split by space)
def get_i()
  return gets.chomp.split(" ").map(&:to_i)
end
#input of float(split by space)
def get_f()
  return gets.chomp.split(" ").map(&:to_f)
end
#input of string(split by space)
def get()
  return gets.chomp.split(" ")
end
#input of string(split per one character)
def get_nsp()
  return gets.chomp.split("")
end
#yes or no decision
def yn_judge(bool,y="Yes",n="No")
  return bool ? y : n 
end
#create of array
def array(size1,init=nil,size2=-1)
  if size2==-1
      return Array.new(size1){init}
  else
      return Array.new(size2){Array.new(size1){init}}
  end
end

def max(a,b)
    return a>b ? a : b
end

def min(a,b)
    return a>b ? b : a
end

INF=Float::INFINITY

A,B,Q=get_i
s=array(A)
kind_s=Hash.new(0)
num=[]
A.times do|i|
    s[i]=gets.to_i
    num<<s[i]
    kind_s[s[i]]=1
end
t=array(B)
kind_t=Hash.new(0)
B.times do|i|
    t[i]=gets.to_i
    num<<t[i]
    kind_t[t[i]]=1
end
x=array(Q)
Q.times do|i|
  x[i]=gets.to_i
  num<<x[i]
end
exc=Hash.new(-1)
to=array(num.size)
num.sort.each_with_index do|v,i|
  exc[v]=i
  to[i]=v
end
n=num.size
info=Array.new(n){[-INF,-INF]}
to.each_with_index do|v,i|
    info[i][0],info[i][1]=info[i-1][0]-1,info[i-1][1]-1 if i.nonzero?
    info[i][0]=0 if kind_s[v]==1
    info[i][1]=0 if kind_t[v]==1
end
(n-2).downto(0) do|i|
    min_i=[0,0]
    min=INF
    if info[i][0]!=-INF and info[i][1]!=-INF
      if info[i][0]>=0 and info[i][1]>=0
          mx=max(info[i][0],info[i][1])+i
          min=to[mx]-to[i]
      elsif info[i][0]<=0 and info[i][1]<=0
          mn=min(info[i][0],info[i][1])+i
          min=to[i]-to[mn]
      else
          mx=max(info[i][0],info[i][1])+i
          mn=min(info[i][0],info[i][1])+i
          min=to[mx]-to[mn]+min((to[i]-to[mx]).abs,(to[i]-to[mn]).abs)
      end
    end
    2.times do|l|
        2.times do|r|
            val=0
            next if l==0 and r==0
            next if info[i+l][0]==-INF or info[i+r][1]==-INF
            if info[i+l][0]+l>=0 and info[i+r][1]+r>=0
                mx=max(info[i+l][0]+l,info[i+r][1]+r)+i
                val=to[mx]-to[i]
            elsif info[i+l][0]+l<=0 and info[i+r][1]+r<=0
                mn=min(info[i+l][0]+l,info[i+r][1]+r)+i
                val=to[i]-to[mn]
            else
                mx=max(info[i+l][0]+l,info[i+r][1]+r)+i
                mn=min(info[i+l][0]+l,info[i+r][1]+r)+i
                #p info
                #p mx
                #p mn
                val=to[mx]-to[mn]+min((to[i]-to[mx]).abs,(to[i]-to[mn]).abs)
            end
            if val<min
                min=val
                min_i=[l,r]
            end
        end
    end
    info[i][0]=info[i+min_i[0]][0]+min_i[0]
    info[i][1]=info[i+min_i[1]][1]+min_i[1]
    #if info[i][0]==-INF or to[info[i][0]]-to[i]>to[info[i+1][0]+1]-to[i]
        #info[i][0]=info[i+1][0]+1
     #end
    #if info[i][1]==-INF or to[info[i][1]]-to[i]>to[info[i+1][1]+1]-to[i]
        #info[i][1]=info[i+1][1]+1
    #end
end
#p s
#p t
#p to
#p info
x.each do|x_|
    i=exc[x_]
    if info[i][0]>=0 and info[i][1]>=0
        mx=max(info[i][0],info[i][1])+i
        puts to[mx]-to[i]
    elsif info[i][0]<=0 and info[i][1]<=0
        mn=min(info[i][0],info[i][1])+i
        puts to[i]-to[mn]
    else
        mx=max(info[i][0],info[i][1])+i
        mn=min(info[i][0],info[i][1])+i
        puts to[mx]-to[mn]+min((to[i]-to[mx]).abs,(to[i]-to[mn]).abs)
    end
end

Measured memory_bytes: 110328