#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

/*
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("-O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
*/

#define fast_io ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define md(l, r) l + (r - l) / 2
#define ll long long
#define btw(a, l, r) a.begin() + l, a.begin() + r + 1
#define F first
#define S second
#define pb push_back
#define all(x) x.begin(), x.end()
#define sz(x) (int(x.size()))
#define sqr(x) (x) * (x)
#define endl '\n'

#define getfiles ifstream cin("input.txt"); ofstream cout("output.txt");
#define clr(x, y) memset((x), (y), sizeof (x))
#define ld long double

typedef tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<vector<int> > vvi;
typedef vector<vector<pair<int, int> > > vvpii;
typedef vector<vector<pair<ll, ll> > > vvpll;
typedef pair<int, pair<int, int> > piii;
typedef vector<ll> vll;
typedef vector<pair<int, int> > vpii;
typedef vector<pair<ll, ll> > vpll;
typedef vector<vector<ll> > vvll;
typedef vector<pair<ll, pair<ll, ll> > > vplll;
typedef pair<ll, ll> pll;

const ld eps = -1e9;
const long long N = 200001, P = 1e9 + 7, P1 = 1e9 + 13, iINF = 1e9, INF = 2e18, K = 73, K1 = 79;

ll dstF(ll x, ll y, ll xx, ll yy) {
    return (sqr(x - xx) + sqr(y - yy));
}

ld dstSqrtF(ll x, ll y, ll xx, ll yy) {
    return (sqrt(sqr(x - xx) + sqr(y - yy)));
}

ll _bp(ll val, ll st, ll p) {
    if (st == 0) {
        return 1;
    }
    ll temp = _bp(val, st / 2, p);
    temp = sqr(temp);
    temp %= p;
    if (st % 2 == 1) {
        temp *= val;
        temp %= p;
    }
    return temp;
}

ll _bp(ll val, ll st) {
    if (st == 0) {
        return 1;
    }
    ll temp = _bp(val, st / 2);
    temp = sqr(temp);
    if (st % 2 == 1) {
        temp *= val;
    }
    return temp;
}

ll nok(ll a, ll b) {
    return (a / __gcd(a, b) * b);
}


ll fact[1001000];

void buildFacts(ll n, ll p) {
    fact[0] = 1;
    for (ll i = 1; i <= n; i++) {
        fact[i] = (fact[i - 1] * i) % p;
    }
}

ll C(ll n, ll k, ll p = -1) {
    if (p == -1) {
        ll x = fact[n];
        ll y = (fact[k] * fact[n - k]);
        return (x / y);
    } else {
        ll x = fact[n];
        ll y = (fact[k] * fact[n - k]) % p;
        x = (x * _bp(y, p - 2, p)) % p;
        return x;
    }
}
pair<ll, ll> a[200200], RU, LU, LD, RD, UL, UR, DL, DR, pXY, pXy, pxY, pxy;
int n;
ll mxR, mxL, mxU, mxD, XY, xY, Xy, xy;

void solve() {
    ll n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i].F >> a[i].S;
        if (i == 1) {
            RU = RD = LU = LD = UR = UL = DL = DR = pXY = pXy = pxY = pxy = a[i];
            mxL = mxR = a[i].F;
            mxU = mxD = a[i].S;
            XY = a[i].F + a[i].S;
            Xy = a[i].F - a[i].S;
            xY = -a[i].F + a[i].S;
            xy = -a[i].F - a[i].S;
        }
        if (a[i].F + a[i].S > XY) {
            pXY = a[i];
            XY = a[i].F + a[i].S;
        }
        if (a[i].F - a[i].S > Xy) {
            pXy = a[i];
            Xy = a[i].F - a[i].S;
        }
        if (-a[i].F + a[i].S > xY) {
            pxY = a[i];
            xY = -a[i].F + a[i].S;
        }
        if (-a[i].F - a[i].S > xy) {
            pxy = a[i];
            xy = -a[i].F - a[i].S;
        }

        //RIGHT
        if (a[i].F == mxR) {
            RU.S = max(RU.S, a[i].S);
            RD.S = min(RD.S, a[i].S);
        }
        if (a[i].F > mxR) {
            RU = a[i];
            mxR = a[i].F;
            RD = a[i];
        }
        //LEFT
        if (a[i].F == mxL) {
            LU.S = max(LU.S, a[i].S);
            LD.S = min(LD.S, a[i].S);
        }
        if (a[i].F < mxL) {
            LU = a[i];
            mxL = a[i].F;
            LD = a[i];
        }

        //UP
        if (a[i].S == mxU) {
            UR.F = max(UR.F, a[i].F);
            UL.F = min(UL.F, a[i].F);
        }
        if (a[i].S > mxU) {
            UR = UL = a[i];
            mxU = a[i].S;
        }
        //DOWN
        if (a[i].S == mxD) {
            DR.F = max(DR.F, a[i].F);
            DL.F = min(DL.F, a[i].F);
        }
        if (a[i].S < mxD) {
            DR = DL = a[i];
            mxD = a[i].S;
        }
    }
    vpll v;
    v.pb(UL);
    v.pb(UR);
    v.pb(DL);
    v.pb(DR);
    v.pb(LD);
    v.pb(LU);
    v.pb(RD);
    v.pb(RU);
    v.pb(pXY);
    v.pb(pXy);
    v.pb(pxY);
    v.pb(pxy);
    ll ans = 0;
    for (int i = 0; i < 12; i++) {
        for (int i1 = i + 1; i1 < 12; i1++) {
            ans = max(ans, abs(v[i].F - v[i1].F) + abs(v[i].S - v[i1].S));
        }
    }
    cout << ans;
}

signed main() {
    //freopen("checklist.in", "r", stdin);
    //freopen("checklist.out", "w", stdout);
    //fast_io;
    int q;
    q = 1;
    //cin >> q;
    while (q != 0) {
        solve();
        --q;
    }
}

/*
*/


Measured memory_bytes: 6756