#include <bits/stdc++.h>
using namespace std;
#define REP(i,a,b) for (int i = (a); i <= (b); ++i)
#define REPD(i,a,b) for (int i = (a); i >= (b); --i)
#define FORI(i,n) REP(i,1,n)
#define FOR(i,n) REP(i,0,int(n)-1)
#define mp make_pair
#define pb push_back
#define vi vector<int>
#define ll long long
#define pii pair<ll,ll>
#define SZ(x) int((x).size())
#define DBG(v) cerr << #v << " = " << (v) << endl;
#define FOREACH(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++)
#define fi first
#define se second

inline ll dst(pii x, pii y) {
	return max(abs(x.fi-y.fi), abs(x.se-y.se));
}

map<ll, set<pii>> X, Y;
ll wdist;
int vis[100100];
pii t[100100], s[100100];

void test() {
	int n,a,b;
	scanf("%d%d%d", &n, &a, &b);
	a--; b--;
	FOR(i,n) {
		int xx, yy;
		scanf("%d%d", &xx, &yy);
		t[i] = mp(xx+yy, xx-yy);
		if (i != a) {
			X[t[i].fi].insert(mp(t[i].se, i));
			Y[t[i].se].insert(mp(t[i].fi, i));
		}
	}
	wdist = dst(t[a], t[b]);
	queue<int> q;
	q.push(a);
	while (!q.empty()) {
		int u = q.front();
		q.pop();
		vis[u] = 1;
		//printf("visiting %d\n", u+1);
		ll x = t[u].fi, y = t[u].se;
		set<pii> :: iterator lo, hi, tmp;

		lo = X[x-wdist].lower_bound(mp(y-wdist, -1));
		hi = X[x-wdist].lower_bound(mp(y+wdist+1, -1));
		while (lo != hi) {
			q.push(lo->se);
			tmp = lo;
			lo++;
			Y[tmp->fi].erase(mp(x-wdist, tmp->se));
			X[x-wdist].erase(tmp);
		}

		lo = X[x+wdist].lower_bound(mp(y-wdist, -1));
		hi = X[x+wdist].lower_bound(mp(y+wdist+1, -1));
		while (lo != hi) {
			q.push(lo->se);
			tmp = lo;
			lo++;
			Y[tmp->fi].erase(mp(x+wdist, tmp->se));
			X[x+wdist].erase(tmp);
		}

		lo = Y[y-wdist].lower_bound(mp(x-wdist, -1));
		hi = Y[y-wdist].lower_bound(mp(x+wdist+1, -1));
		while (lo != hi) {
			q.push(lo->se);
			tmp = lo;
			lo++;
			X[tmp->fi].erase(mp(y-wdist, tmp->se));
			Y[y-wdist].erase(tmp);
		}

		lo = Y[y+wdist].lower_bound(mp(x-wdist, -1));
		hi = Y[y+wdist].lower_bound(mp(x+wdist+1, -1));
		while (lo != hi) {
			q.push(lo->se);
			tmp = lo;
			lo++;
			X[tmp->fi].erase(mp(y+wdist, tmp->se));
			Y[y+wdist].erase(tmp);
		}
	}
	ll res = 0;
	FOR(i,n) s[i]=t[i];
	//FOR(i,n) printf("%d -- %d %d\n", i+1, t[i].fi, t[i].se);
	sort(t,t+n);
	FOR(i,n) if (vis[i]){
		ll x=s[i].fi, y=s[i].se, lo, hi;
		//printf("i=%d : ", i+1);
		lo = lower_bound(t, t+n, mp(x-wdist, y-wdist)) - t;
		hi = lower_bound(t, t+n, mp(x-wdist, y+wdist+1)) - t;
		//for (int j=lo; j<hi; j++) printf("(%d %d) ", t[j].fi, t[j].se);
		res += hi-lo;
		lo = lower_bound(t, t+n, mp(x+wdist, y-wdist)) - t;
		hi = lower_bound(t, t+n, mp(x+wdist, y+wdist+1)) - t;
		//for (int j=lo; j<hi; j++) printf("(%d %d)", t[j].fi, t[j].se);
		res += hi-lo;
		//printf("\n%d %lld\n", i+1, res);
	}
	FOR(i,n) swap(t[i].fi, t[i].se);
	sort(t,t+n);
	FOR(i,n) if (vis[i]){
		ll x=s[i].se, y=s[i].fi, lo, hi;
		//printf("i=%d : ", i+1);
		lo = lower_bound(t, t+n, mp(x-wdist, y-wdist+1)) - t;
		hi = lower_bound(t, t+n, mp(x-wdist, y+wdist)) - t;
		//for (int j=lo; j<hi; j++) printf("(%d %d) ", t[j].se, t[j].fi);
		res += hi-lo;
		lo = lower_bound(t, t+n, mp(x+wdist, y-wdist+1)) - t;
		hi = lower_bound(t, t+n, mp(x+wdist, y+wdist)) - t;
		//for (int j=lo; j<hi; j++) printf("(%d %d)", t[j].se, t[j].fi);
		res += hi-lo;
		//printf("\n%d %lld\n", i+1, res);
	}
	printf("%lld\n", res/2);
}

int main() {
	int ttn=1;
	//scanf("%d", &ttn);
	while (ttn--) test();
	return 0;
}


Measured memory_bytes: 48768