import qualified Data.Text.Lazy as T
import qualified Data.Text.Lazy.IO as T
import qualified Data.Text.Lazy.Read as T

main :: IO ()
main = do
  let
    f :: (Int, Int) -> (Int, Int)
    f (x, y) = (x - y, x + y)
    g :: [(Int, Int)] -> ((Int, Int), (Int, Int))
    g = foldl step ((maxBound, minBound), (maxBound, minBound))
      where
        step ((min0, max0), (min1, max1)) (u, v) = (g' min0 max0 u, g' min1 max1 v)
        g' s t u | u < s     = (u, t)
                 | t < u     = (s, u)
                 | otherwise = (s, t)
    h :: ((Int, Int), (Int, Int)) -> Int
    h ((min0, max0), (min1, max1)) = max (max0 - min0) (max1 - min1)
  n <- unsafeTextToInt <$> T.getLine :: IO Int
  xys <- map (unsafeListToPair . map unsafeTextToInt . T.words) . T.lines <$> T.getContents :: IO [(Int, Int)]
  print . h . g . map f $ xys

unsafeListToPair :: [Int] -> (Int, Int)
unsafeListToPair [x, y] = (x, y)
{-# INLINE unsafeListToPair #-}

unsafeTextToInt :: T.Text -> Int
unsafeTextToInt s = case T.signed T.decimal s of
  Right (n, _) -> n
{-# INLINE unsafeTextToInt #-}
