#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e5+5,M=8*N;
int n,pa,pb,d,i,g[N];long long ans;
struct arr{int x,y,id;}a[N];
bool operator < (arr A,arr B){
	return A.x<B.x||A.x==B.x&&A.y<B.y;
}
int read(){
	char c=getchar();int k=0;for (;c<48||c>57;c=getchar());
	for (;c>47&&c<58;c=getchar()) k=(k<<3)+(k<<1)+c-48;return k;
}
int et,he[N];struct edge{int l,to;}e[M];
void line(int x,int y){
	e[++et].l=he[x];he[x]=et;e[et].to=y;
	e[++et].l=he[y];he[y]=et;e[et].to=x;
}
void work(int k){
	int i,j,l,r;sort(a+1,a+n+1);
	for (i=j=l=r=1;i<=n;i++){
		for (;a[l].x<a[i].x-d||
			a[l].x==a[i].x-d&&a[l].y<a[i].y-k;l++);
		for (;a[r].x<a[i].x-d||
			a[r].x==a[i].x-d&&a[r].y<=a[i].y+k;r++);
		g[a[i].id]+=r-l;j=max(j,l);if (j>=r) continue;
		for (line(a[i].id,a[j].id);j+1<r;j++)
			line(a[j].id,a[j+1].id);
	}
}
bool vis[N];
void dfs(int x){
	vis[x]=1;ans+=g[x];
	for (int i=he[x];i;i=e[i].l)
		if (!vis[e[i].to]) dfs(e[i].to);
}
int main(){
	n=read();pa=read();pb=read();
	for (i=1;i<=n;i++){
		int x=read(),y=read();
		a[i]=(arr){x+y,x-y,i};
	}
	d=max(abs(a[pa].x-a[pb].x),abs(a[pa].y-a[pb].y));
	work(d);
	for (i=1;i<=n;i++) swap(a[i].x,a[i].y);
	work(d-1);dfs(pa);
	printf("%lld",ans);
}