unittest
{
	assert( [ "2 3 4", "100", "600", "400", "900", "1000", "150", "2000", "899", "799" ].parse.expand.solve == "350\n1400\n301\n399" );
	assert( [ "1 1 3", "1", "10000000000", "2", "9999999999", "5000000000" ].parse.expand.solve == "10000000000\n10000000000\n14999999998" );
}



import std.algorithm;
import std.conv;
import std.math;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto abq = input.front.split.to!( long[] );
	auto ss = new long[ abq[ 0 ] ];
	foreach( ref s; ss )
	{
		input.popFront;
		s = input.front.to!( long );
	}
	auto ts = new long[ abq[ 1 ] ];
	foreach( ref t; ts )
	{
		input.popFront;
		t = input.front.to!( long );
	}
	auto xs = new long[ abq[ 2 ] ];
	foreach( ref x; xs )
	{
		input.popFront;
		x = input.front.to!( long );
	}
	
	return tuple( ss, ts, xs );
}

auto solve( long[] ss, long[] ts, long[] xs )
{
	// 後で順番を復元するためにインデックス付きXsを作成
	auto xps = new Tuple!( long, long )[ xs.length ];
	foreach( i, x; xs )
	{
		xps[ i ] = tuple( x, i );
	}
	
	ss.sort();
	ts.sort();
	xps.sort();
	
	auto anss = new long[ xs.length ];
	auto si = 0L;
	auto ti = 0L;
	foreach( xp; xps )
	{
		auto x = xp[ 0 ];
		auto xi = xp[ 1 ];
		
		auto sl = 0L;
		auto sr = 0L;
		auto tl = 0L;
		auto tr = 0L;
		
		// xから東と西で一番近い神社までの距離を計算
		solve2( ss, x, si, sl, sr );
		
		// xから東と西で一番近い寺までの距離を計算
		solve2( ts, x, ti, tl, tr );
		
		// 一番近い神社と寺に行くときの最短距離を計算
		anss[ xi ] = min(
			max( sl, tl ),					// 西の神社と寺に行く（まっすぐ行って終わり）
			max( sr, tr ),					// 東の神社と寺に行く（まっすぐ行って終わり）
			sl + tr + min( sl, tr ),		// 西の神社と東の寺に行く（近いほうに行って戻る）
			sr + tl + min( sr, tl )			// 東の神社と西の寺に行く（近いほうに行って戻る）
		);
	}
	
	return anss.map!( to!string ).join( "\n" );
}

void solve2( long[] as, long x, ref long ai, out long al, out long ar )
{
	const FAR = 10L ^^ 10 * 2;
	
	// xから東の一番近い神社or寺を検索
	foreach( a; as[ ai .. $ ] )
	{
		if( x <= a ) break;
		ai++;
	}
	
	al = FAR;
	ar = FAR;
	
	// xと神社or寺の位置が同じときは移動不要
	if( ai < as.length && as[ ai ] == x )
	{
		al = 0L;
		ar = 0L;
	}
	else
	{
		// xから東の一番近い神社or寺へ移動するときの距離を計算
		if( 0  < ai ) al = x - as[ ai - 1 ];
		
		// xから西の一番近い神社or寺へ移動するときの距離を計算
		if( ai < as.length ) ar = as[ ai ] - x;
	}
}
