#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<string.h>
#include<vector>
#include<set>
using namespace std;
long long x[110000];
long long y[110000];
long long X[110000];
long long Y[110000];
long long zx[110000];
long long zy[110000];
long long ABS(long long a){return max(a,-a);}
vector<long long> xv[110000];
vector<long long> yv[110000];
set<pair<long long,int> >xs[110000];
set<pair<long long,int> >ys[110000];
int v[110000];
int main(){
	int a,b,c;scanf("%d%d%d",&a,&b,&c);
	b--;c--;
	for(int i=0;i<a;i++)scanf("%lld%lld",x+i,y+i);
	for(int i=0;i<a;i++){
		X[i]=x[i]+y[i];
		Y[i]=x[i]-y[i];
		zx[i]=X[i];
		zy[i]=Y[i];
	}
	std::sort(zx,zx+a);
	std::sort(zy,zy+a);
	for(int i=0;i<a;i++){
		//if(i!=b&&i!=c){
			xv[lower_bound(zx,zx+a,X[i])-zx].push_back(Y[i]);
			yv[lower_bound(zy,zy+a,Y[i])-zy].push_back(X[i]);
		
			xs[lower_bound(zx,zx+a,X[i])-zx].insert(make_pair(Y[i],i));
			ys[lower_bound(zy,zy+a,Y[i])-zy].insert(make_pair(X[i],i));
		//}
	}
	for(int i=0;i<a;i++){
		std::sort(xv[i].begin(),xv[i].end());
		std::sort(yv[i].begin(),yv[i].end());
	}
	long long d=ABS(x[b]-x[c])+ABS(y[b]-y[c]);
	long long ret=0;
	queue<int>Q;
	Q.push(b);
	Q.push(c);
	v[b]=v[c]=1;
	while(Q.size()){
		int at=Q.front();Q.pop();
		long long X1=X[at]-d;
		long long X2=X[at]+d;
		long long Y1=Y[at]-d;
		long long Y2=Y[at]+d;
		int s1=lower_bound(zx,zx+a,X1)-zx;
		int s2=lower_bound(zx,zx+a,X2)-zx;
		int t1=lower_bound(zy,zy+a,Y1)-zy;
		int t2=lower_bound(zy,zy+a,Y2)-zy;
	//	printf("%lld %lld %lld\n",x[at],y[at],ret);
		set<int> er;
		if(zx[s1]==X1){
			ret+=upper_bound(xv[s1].begin(),xv[s1].end(),Y2)-lower_bound(xv[s1].begin(),xv[s1].end(),Y1);
			for(set<pair<long long,int> >::iterator it=xs[s1].lower_bound(make_pair(Y1,0));it!=xs[s1].end()&&(*it).first<=Y2;it++){
				er.insert((*it).second);
				int to=(*it).second;
				if(!v[to]){
					v[to]=1;
					Q.push(to);
				}
			}
		}
		if(zx[s2]==X2){
			ret+=upper_bound(xv[s2].begin(),xv[s2].end(),Y2)-lower_bound(xv[s2].begin(),xv[s2].end(),Y1);
			for(set<pair<long long,int> >::iterator it=xs[s2].lower_bound(make_pair(Y1,0));it!=xs[s2].end()&&(*it).first<=Y2;it++){
				er.insert((*it).second);
				int to=(*it).second;
				if(!v[to]){
					v[to]=1;
					Q.push(to);
				}
			}
		}
		if(zy[t1]==Y1){
			ret+=max(0,(int)(upper_bound(yv[t1].begin(),yv[t1].end(),X2-1)-lower_bound(yv[t1].begin(),yv[t1].end(),X1+1)));
			for(set<pair<long long,int> >::iterator it=ys[t1].lower_bound(make_pair(X1,0));it!=ys[t1].end()&&(*it).first<=X2;it++){
				er.insert((*it).second);
				int to=(*it).second;
				if(!v[to]){
					v[to]=1;
					Q.push(to);
				}
			}
		}
		if(zy[t2]==Y2){
			ret+=max(0,(int)(upper_bound(yv[t2].begin(),yv[t2].end(),X2-1)-lower_bound(yv[t2].begin(),yv[t2].end(),X1+1)));
			for(set<pair<long long,int> >::iterator it=ys[t2].lower_bound(make_pair(X1,0));it!=ys[t2].end()&&(*it).first<=X2;it++){
				er.insert((*it).second);
				int to=(*it).second;
				if(!v[to]){
					v[to]=1;
					Q.push(to);
				}
			}
		}
		for(set<int>::iterator it=er.begin();it!=er.end();it++){
			long long tx=X[(*it)];
			long long ty=Y[(*it)];
			xs[lower_bound(zx,zx+a,tx)-zx].erase(make_pair(ty,*it));
			ys[lower_bound(zy,zy+a,ty)-zy].erase(make_pair(tx,*it));
		}
	}
	ret/=2;
	printf("%lld\n",ret);
}

Measured memory_bytes: 39416