import qualified Data.ByteString.Char8 as BS
import Control.Monad
import Data.Char
import Data.List

getVals::IO [Int]
getVals = unfoldr (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine

main::IO()
main = do
    n:_ <- getVals
    dat <- forM [1..n] (\_ -> do
        x:y:_<-getVals
        return (x,y))
    print $ solver dat

urDir::[(Int,Int)]->Int
urDir coords = let sorted = sort $ map (\ (x,y) -> x+y) coords in 
               abs (head sorted - last sorted)

ulDir::[(Int,Int)]->Int
ulDir coords = let sorted = sort $ map (\ (x,y) -> x-y) coords in 
               abs (head sorted - last sorted)

solver::[(Int,Int)] -> Int
solver coords = max (urDir coords) (ulDir coords)