#include <bits/stdc++.h>
using namespace std;
#define TRACE(x) x
#define WATCH(x) TRACE( cout << #x" = " << x << endl)
#define PRINT(x) TRACE(printf(x))
#define WATCHR(a, b) TRACE( for(auto c = a; c != b;) cout << *(c++) << " "; cout << endl)
#define WATCHC(V) TRACE({cout << #V" = "; WATCHR(V.begin(), V.end());})
#define rep(i, a, b) for(int i = (a); (i) < (b); ++(i))
#define trav(a, x) for(auto& a : x)
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define sz(x) static_cast<int>(x.size())
#define mp make_pair
#define fi first
#define se second

using vi = vector<int>;
using vvi = vector<vi>;
using ll = long long;
using vll = vector<ll>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

void buff() { ios::sync_with_stdio(false); cin.tie(nullptr); }

constexpr ll MOD = 1e9 + 7;

inline ll pow_mod(ll a, ll b, ll mod = MOD) {
    ll res = 1; a %= mod; assert(b >= 0);
    for(;b;b>>=1) {
        if(b & 1) res = (res * a) % mod;
        a = (a * a) % mod;
    }
    return res;
}

template<typename T> inline void remin(T& x, const T& y) { x = min(x, y); }
template<typename T> inline void remax(T& x, const T& y) { x = max(x, y); }

template<typename T> ostream& operator<<(ostream &os, const vector<T>& v) {
    os << "{"; string sep; for(const auto& x : v) os << sep << x, sep = ", "; return os << "}"; 
}

template<typename T, size_t size> ostream& operator<<(ostream& os, const array<T, size>& arr) {
    os << "{"; string sep; for(const auto& x : arr) os << sep << x, sep = ", "; return os << "}"; 
}

template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { 
    return os << '(' << p.first << ", " << p.second << ')'; 
}

int main() {
    buff();
    int n;
    cin >> n;
    vector< pii > v(n);
    for(int i = 0; i < n; ++i) {
        cin >> v[i].first >> v[i].second;
    }
    int maior_soma = v[0].first + v[0].second;
    int id = 0;
    rep(i, 1, n) {
        if(v[i].first + v[i].second > maior_soma) {
            maior_soma = v[i].first + v[i].second;
            id = i;
        }
    }
    auto manhattan_dist = [&] (int i, int j) {
        return abs(v[i].first - v[j].first) + abs(v[i].second - v[j].second);
    };

    auto get_max = [&] (int fix) {
        int max_d = 0;
        rep(i, 0, n) remax(max_d, manhattan_dist(i, fix));
        return max_d;
    };
    
    int ans = get_max(id);
    maior_soma = v[0].first - v[0].second;
    id = 0; 
    rep(i, 1, n) {
        if(v[i].first - v[i].second > maior_soma) {
            maior_soma = v[i].first - v[i].second;
            id = i;
        }
    }

    remax(ans, get_max(id));
    maior_soma = -v[0].first + v[0].second;
    id = 0;
    rep(i, 1, n) {
        if(-v[i].first + v[i].second > maior_soma) {
            maior_soma = -v[i].first + v[i].second;
            id = i;
        }
    }

    remax(ans, get_max(id));
    maior_soma = -v[0].first - v[0].second;
    id = 0;
    rep(i, 1, n) {
        if(-v[i].first - v[i].second > maior_soma) {
            maior_soma = -v[i].first - v[i].second;
            id = i;
        }
    }

    remax(ans, get_max(id));
    cout << ans << '\n';
    return 0;
}



Measured memory_bytes: 4776