#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define MN 100005
using namespace std;
inline int in(){
    int x=0;bool f=0;char c;
    for (;(c=getchar())<'0'||c>'9';f=c=='-');
    for (x=c-'0';(c=getchar())>='0'&&c<='9';x=(x<<3)+(x<<1)+c-'0');
    return f?-x:x;
}
struct pt{
	int x,y,id;
}a[MN];
struct edge{
	int to,nxt;
}e[MN<<3];
ll res;
int h[MN],sum[MN];
int n,A,B,d,x,y,cnt;
bool vis[MN];
inline void ins(int x,int y){
	e[++cnt].to=y;e[cnt].nxt=h[x];h[x]=cnt;
}
inline bool cmp(pt a,pt b){
	return (a.x==b.x)?a.y<b.y:a.x<b.x;
}
inline void sol(int D){
	sort(a+1,a+n+1,cmp);
	for (int i=1,j=1,hd=1,tl=1;i<=n;++i){
		while (hd<=n&&(a[i].x-a[hd].x>d||(a[i].x-a[hd].x==d&&a[i].y-a[hd].y>D))) ++hd;
		while (tl<=n&&(a[i].x-a[tl].x>d||(a[i].x-a[tl].x==d&&a[i].y-a[tl].y>=-D))) ++tl;
		sum[a[i].id]+=tl-hd;j=max(j,hd);if (j>=tl) continue;
		ins(a[i].id,a[j].id);ins(a[j].id,a[i].id);
		for (;j+1<tl;j++)
		ins(a[j].id,a[j+1].id),ins(a[j+1].id,a[j].id);
	}
}
inline void dfs(int u){
	for (int i=h[u];i;i=e[i].nxt){
		int v=e[i].to;
		if (vis[v]) continue;
		vis[v]=1;res+=1ll*sum[v];dfs(v);
	}
}
int main()
{
	n=in();A=in();B=in();
	for (int i=1;i<=n;++i){
		x=in();y=in();
		a[i].x=x+y;a[i].y=y-x;a[i].id=i;
	}d=max(abs(a[A].x-a[B].x),abs(a[A].y-a[B].y));sol(d);
	for (int i=1;i<=n;++i) swap(a[i].x,a[i].y);
	sol(d-1);res=1ll*sum[A];vis[A]=1;dfs(A);
	printf("%lld",res);return 0;
}