#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <utility>
#include <algorithm>
#define llint long long

using namespace std;
typedef pair<llint, llint> P;

llint n;
llint a, b, d;
llint x[100005], y[100005];
llint u[100005], v[100005];
llint num[100005];
map<llint, vector<llint> > uvec, vvec;
map<llint, set<llint> > uset, vset;
set<P> S;

void dfs(llint U, llint V)
{
	if(S.count(make_pair(U, V))) return;
	S.insert(make_pair(U, V));
	
	vector<P> vec;
	if(uset.count(U+d)){
		set<llint> &mp = uset[U+d];
		auto l = mp.lower_bound(V-d), r = mp.upper_bound(V+d);
		for(auto it = l; it != r; it++) vec.push_back(make_pair(U+d, *it));
		mp.erase(l, r);
	}
	if(uset.count(U-d)){
		set<llint> &mp = uset[U-d];
		auto l =  mp.lower_bound(V-d), r = mp.upper_bound(V+d);
		for(auto it = l; it != r; it++) vec.push_back(make_pair(U-d, *it));
		mp.erase(l, r);
	}
	if(vset.count(V+d)){
		set<llint> &mp = vset[V+d];
		auto l =  mp.lower_bound(U-d), r = mp.upper_bound(U+d);
		for(auto it = l; it != r; it++) vec.push_back(make_pair(*it, V+d));
		mp.erase(l, r);
	}
	if(vset.count(V-d)){
		set<llint> &mp = vset[V-d];
		auto l =  mp.lower_bound(U-d), r = mp.upper_bound(U+d);
		for(auto it = l; it != r; it++) vec.push_back(make_pair(*it, V-d));
		mp.erase(l, r);
	}
	sort(vec.begin(), vec.end());
	vec.erase(unique(vec.begin(), vec.end()), vec.end());
	
	for(int i = 0; i < vec.size(); i++) dfs(vec[i].first, vec[i].second);
}

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> a >> b;
	for(int i = 1; i <= n; i++) cin >> x[i] >> y[i];
	for(int i = 1; i <= n; i++){
		u[i] = x[i] + y[i];
		v[i] = x[i] - y[i];
		uvec[u[i]].push_back(v[i]);
		vvec[v[i]].push_back(u[i]);
		uset[u[i]].insert(v[i]);
		vset[v[i]].insert(u[i]);
	}
	
	for(auto it = uvec.begin(); it != uvec.end(); it++){
		sort(it->second.begin(), it->second.end());
	}
	for(auto it = vvec.begin(); it != vvec.end(); it++){
		sort(it->second.begin(), it->second.end());
	}
	
	d = abs(x[a]-x[b]) + abs(y[a]-y[b]);
	for(int i = 1; i <= n; i++){
		llint sum = 0;
		if(uvec.count(u[i]+d)){
			vector<llint> &vec = uvec[u[i]+d];
			sum += upper_bound(vec.begin(), vec.end(), v[i]+d) - lower_bound(vec.begin(), vec.end(), v[i]-d);
		}
		if(uvec.count(u[i]-d)){
			vector<llint> &vec = uvec[u[i]-d];
			sum += upper_bound(vec.begin(), vec.end(), v[i]+d) - lower_bound(vec.begin(), vec.end(), v[i]-d);
		}
		if(vvec.count(v[i]+d)){
			vector<llint> &vec = vvec[v[i]+d];
			sum += upper_bound(vec.begin(), vec.end(), u[i]+d) - lower_bound(vec.begin(), vec.end(), u[i]-d);
		}
		if(vvec.count(v[i]-d)){
			vector<llint> &vec = vvec[v[i]-d];
			sum += upper_bound(vec.begin(), vec.end(), u[i]+d) - lower_bound(vec.begin(), vec.end(), u[i]-d);
		}
		if(uset[u[i]+d].count(v[i]+d)) sum--;
		if(uset[u[i]+d].count(v[i]-d)) sum--;
		if(uset[u[i]-d].count(v[i]+d)) sum--;
		if(uset[u[i]-d].count(v[i]-d)) sum--;
		num[i] = sum;
	}
	
	uset[u[a]].erase(v[a]);
	vset[v[a]].erase(u[a]);
	dfs(u[a], v[a]);
	
	uset[u[b]].erase(v[b]);
	vset[v[b]].erase(u[b]);
	dfs(u[b], v[b]);
	
	llint ans = 0;
	for(int i = 1; i <= n; i++){
		if(S.count(make_pair(u[i], v[i]))) ans += num[i];
	}
	ans /= 2;
	cout << ans << endl;
	
	return 0;
}

Measured memory_bytes: 73856