#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cassert>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <functional>
#include <iostream>
#include <map>
#include <set>
#include <cassert>
#include <bits/stdc++.h>
#include <unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<int,P> P1;
typedef pair<P,P> P2;
#define pu push
#define pb push_back
#define mp make_pair
#define eps 1e-7
#define INF 1000000000LL
#define mod 1000000007
#define fi first
#define sc second
#define rep(i,x) for(int i=0;i<x;i++)
#define SORT(x) sort(x.begin(),x.end())
#define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())
ll n,x[100005],y[100005],p,q,D,ans;
vector<ll>zx,zy;
vector<int>vi;
bool used[200005];
set<pair<ll,ll> >xz[200005],yz[200005];
vector<pair<ll,ll> >X[200005],Y[200005];
void dfs(int u){
	if(used[u]) return; //cout<<u<<endl;
	used[u] = 1;  vi.pb(u);
	ll X1 = x[u]+y[u]-D,X2 = x[u]+y[u]+D;
	ll Y1 = x[u]-y[u]-D,Y2 = x[u]-y[u]+D;
	vector<int>nxt;
	if(POSL(zx,X1) != zx.size() && zx[POSL(zx,X1)] == X1){
		int a = POSL(zx,X1);
		if(!xz[a].empty()) {
    		for(set<pair<ll,ll> >::iterator it=xz[a].lower_bound(mp(Y1,-1LL)) ;;){
    			if(it == xz[a].end() || (*it).fi > Y2) break;
    			int W = (*it).sc;
    			it = xz[a].erase(it);
    			nxt.pb(W);
    		}
		}
	}
	if(POSL(zx,X2) != zx.size() && zx[POSL(zx,X2)] == X2){
		int a = POSL(zx,X2);
		if(!xz[a].empty()){
    		for(set<pair<ll,ll> >::iterator it=xz[a].lower_bound(mp(Y1,-1LL)) ;;){
    			if(it == xz[a].end() || (*it).fi > Y2) break;
    			int W = (*it).sc;
    			it = xz[a].erase(it);
    			nxt.pb(W);
    		}
		}
	}
	if(POSL(zy,Y1) != zy.size() && zy[POSL(zy,Y1) ] == Y1){
		int a = POSL(zy,Y1);
		if(!yz[a].empty()){
    		for(set<pair<ll,ll> >::iterator it=yz[a].lower_bound(mp(X1,-1LL)) ;;){
    			if(it == yz[a].end() || (*it).fi > X2) break;
    			int W = (*it).sc;
    			it = yz[a].erase(it);
    			nxt.pb(W);
    		}
		}
	}
	if(POSL(zy,Y2) != zy.size() && zy[POSL(zy,Y2) ] == Y2){
		int a = POSL(zy,Y2);
		if(!yz[a].empty()){
    		for(set<pair<ll,ll> >::iterator it=yz[a].lower_bound(mp(X1,-1LL)) ;;){
    			if(it == yz[a].end() || (*it).fi > X2) break;
    			int W = (*it).sc;
    			it = yz[a].erase(it);
    			nxt.pb(W);
    		}
		}
	}
	for(int i=0;i<nxt.size();i++) dfs(nxt[i]);
}
int main(){
	scanf("%lld%lld%lld",&n,&p,&q); p--;q--;
	for(int i=0;i<n;i++){
		scanf("%lld%lld",&x[i],&y[i]);
		zx.pb(x[i]+y[i]);
		zy.pb(x[i]-y[i]);
	}
	SORT(zx); SORT(zy);
	ERASE(zx); ERASE(zy);
	for(int i=0;i<n;i++){
		int a = POSL(zx,x[i]+y[i]);
		int b = POSL(zy,x[i]-y[i]);
		X[a].pb(mp(zy[b],i));
		Y[b].pb(mp(zx[a],i));
		if(i==p) continue;
		xz[a].insert(mp(zy[b],i));
		yz[b].insert(mp(zx[a],i));
	}
	for(int i=0;i<200005;i++){ SORT(X[i]); SORT(Y[i]);}
	D = max( abs(x[p]+y[p]-x[q]-y[q]) , abs(x[p]-y[p]-x[q]+y[q]) );
	dfs(p);
	ll ans = 0;
	for(int i=0;i<vi.size();i++){
		int u = vi[i];
		ll X1 = x[u]+y[u]-D,X2 = x[u]+y[u]+D;
		ll Y1 = x[u]-y[u]-D,Y2 = x[u]-y[u]+D;
		if(POSL(zx,X2) != zx.size() && zx[POSL(zx,X2)] == X2){
			int a = POSL(zx,X2);
			int b = POSL(X[a],mp(Y1,-1LL)),c = POSU(X[a],mp(Y2-1LL,INF));
			ans+=c-b;
		}
		if(POSL(zy,Y2) != zy.size() && zy[POSL(zy,Y2) ] == Y2){
			int a = POSL(zy,Y2);
			int b = POSL(Y[a],mp(X1+1LL,-1LL)),c = POSU(Y[a],mp(X2,INF));
			ans+=c-b;//if(i==1)cout<<Y[a][0].fi<<X1<<X2<<endl;
		}
		//cout << ans << " " <<vi[i] << endl;
	}
	cout << ans << endl;
}

Measured memory_bytes: 59116