#include <iostream>
#include <vector>
#include <array>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <tuple>
#include <bitset>
#include <memory>
#include <cmath>
#include <algorithm>
#include <functional>
#include <iomanip>
#include <numeric>
#include <climits>
#include <cfloat>

struct Line {
	int section;
	Line(const int s) : section{ s } {};
	virtual int y(const int x) const = 0;
};

struct Coordinate {
	int x, y;
	int distance_from(const Line& line) const {
		return std::abs(y - line.y(x));
	}
};
struct Line45 : public Line {
	int y(const int x) const override {
		return section + x;
	}
	Line45(const Coordinate& c) : Line{ c.y - c.x } {};
};
struct Line135 : public Line {
	int y(const int x) const override {
		return section - x;
	}
	Line135(const Coordinate& c) : Line{ c.y + c.x } {};
};


int main() {
	int n; std::cin >> n;
	std::vector<Coordinate> facility(n);
	for (auto& f : facility) std::cin >> f.x >> f.y;
	Line45 min_line45(facility.front()), max_line45(facility.front());
	Line135 min_line135(facility.front()), max_line135(facility.front());
	for (const auto& f : facility) {
		Line45 line45(f);
		Line135 line135(f);
		if (line45.section < min_line45.section) {
			min_line45 = line45;
		}
		if (line45.section > max_line45.section) {
			max_line45 = line45;
		}
		if (line135.section < min_line135.section) {
			min_line135 = line135;
		}
		if (line135.section > max_line135.section) {
			max_line135 = line135;
		}
	}
	auto min = 1;
	auto max = 400001;
	while (min < max) {
		auto mid = (min + max) / 2;
		bool can_separate = 
			std::all_of(facility.begin(), facility.end(), [mid, min_line45, max_line45, min_line135, max_line135](const Coordinate& f) {
			return (f.distance_from(min_line45) <= mid && f.distance_from(min_line135) <= mid) ||
				(f.distance_from(max_line45) <= mid && f.distance_from(max_line135) <= mid);
				}) ||
			std::all_of(facility.begin(), facility.end(), [mid, min_line45, max_line45, min_line135, max_line135](const Coordinate& f) {
					return (f.distance_from(max_line45) <= mid && f.distance_from(min_line135) <= mid) ||
						(f.distance_from(min_line45) <= mid && f.distance_from(max_line135) <= mid);
				});
				if (can_separate) {
					max = mid;
				}
				else {
					min = mid + 1;
				}
	}
	std::cout << max << '\n';
}
