unittest
{
	assert( [ "3", "1 1", "2 4", "3 2" ].solve == 4 );
	assert( [ "2", "1 1", "1 1" ].solve == 0 );
	
	assert( [ "4", "1 1", "100 1", "1 101", "100 100" ].solve == 199 );		// 追加ケース
}



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

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

auto solve( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto n = input.front.to!( long );
	auto xys = new long[ 2 ][ n ];
	foreach( ref xy; xys )
	{
		input.popFront;
		xy = input.front.split.to!( long[] );
	}
	
	// 45度回転という式変形を使う
	// d = abs( x[a]-x[b] ) + abs( y[a]-y[b] )
	// --> d = max( x[a]-x[b]+y[a]-y[b], x[b]-x[a]+y[b]-y[a], x[a]-x[b]+y[b]-y[a], x[b]-x[a]+y[a]-y[b] )
	// --> d = max( x[a]+y[a]-x[b]-y[b], x[b]+y[b]-x[a]-y[a], x[a]-y[a]-x[b]+y[b], x[b]-y[b]-x[a]+y[a] )
	// --> d = max( (x[a]+y[a])-(x[b]+y[b]), (x[b]+y[b])-(x[a]+y[a]), (x[a]-y[a])-(x[b]-y[b]), (x[b]-y[b])-(x[a]-y[a]) )
	// --> p[a] = x[a] + y[a]
	//     p[b] = x[b] + y[b]
	//     m[a] = x[a] - y[a]
	//     m[b] = x[b] - y[b]
	//     d = max( p[a]-p[b], p[b]-p[a], m[a]-m[b], m[b]-m[a] )
	// --> d = max( abs( p[a]-p[b] ), abs( m[a]-m[b] ) )
	auto pma = long.min;
	auto pmi = long.max;
	auto mma = long.min;
	auto mmi = long.max;
	foreach( xy; xys )
	{
		auto p = xy[ 0 ] + xy[ 1 ];
		auto m = xy[ 0 ] - xy[ 1 ];
		pma = max( pma, p );
		pmi = min( pmi, p );
		mma = max( mma, m );
		mmi = min( mmi, m );
	}
	return max( pma - pmi, mma - mmi );
}
