#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <string>
#include <bitset>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#include <sstream>
#include <stack>
#include <iomanip>
using namespace std;
#define pb push_back
#define mp make_pair
typedef pair<int,int> pii;
typedef long long ll;
typedef double ld;
typedef vector<int> vi;
#define fi first
#define se second
#define fe first
#define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}
#define Edg int M=0,fst[SZ],vb[SZ],nxt[SZ];void ad_de(int a,int b){++M;nxt[M]=fst[a];fst[a]=M;vb[M]=b;}void adde(int a,int b){ad_de(a,b);ad_de(b,a);}
#define Edgc int M=0,fst[SZ],vb[SZ],nxt[SZ],vc[SZ];void ad_de(int a,int b,int c){++M;nxt[M]=fst[a];fst[a]=M;vb[M]=b;vc[M]=c;}void adde(int a,int b,int c){ad_de(a,b,c);ad_de(b,a,c);}
#define es(x,e) (int e=fst[x];e;e=nxt[e])
#define esb(x,e,b) (int e=fst[x],b=vb[e];e;e=nxt[e],b=vb[e])
#define SZ 666666
int n,a,b,x[SZ],y[SZ];
struct cmp_x
{
bool operator () (int a,int b)
{
	if(x[a]!=x[b]) return x[a]<x[b];
	return a<b;
}
};
struct cmp_y
{
bool operator () (int a,int b)
{
	if(y[a]!=y[b]) return y[a]<y[b];
	return a<b;
}
};
//不要怂 
map<int,vector<int> > vy;
map<int,set<int,cmp_x> > by;
map<int,vector<int> > vx;
map<int,set<int,cmp_y> > bx;
int D;
queue<int> q;
bool vis[SZ];
void mark(int s)
{
	vis[s]=1;
	by[y[s]].erase(s);
	bx[x[s]].erase(s);
}
void pop()
{
	int s=q.front(); q.pop();
	{
	auto&g=bx[x[s]-D];
	y[0]=y[s]-D; y[n+1]=y[s]+D;
	auto L=g.lower_bound(0),R=g.lower_bound(n+1);
	while(L!=R)
	{
		auto nx=L; ++nx;
		q.push(*L); mark(*L); L=nx;
	}
	}
	{
	auto&g=bx[x[s]+D];
	y[0]=y[s]-D; y[n+1]=y[s]+D;
	auto L=g.lower_bound(0),R=g.lower_bound(n+1);
	while(L!=R)
	{
		auto nx=L; ++nx;
		q.push(*L); mark(*L); L=nx;
	}
	}
	{
	auto&g=by[y[s]-D];
	x[0]=x[s]-D; x[n+1]=x[s]+D;
	auto L=g.lower_bound(0),R=g.lower_bound(n+1);
	while(L!=R)
	{
		auto nx=L; ++nx;
		q.push(*L); mark(*L); L=nx;
	}
	}
	{
	auto&g=by[y[s]+D];
	x[0]=x[s]-D; x[n+1]=x[s]+D;
	auto L=g.lower_bound(0),R=g.lower_bound(n+1);
	while(L!=R)
	{
		auto nx=L; ++nx;
		q.push(*L); mark(*L); L=nx;
	}
	}
}
void bfs(int S)
{
	q.push(S); mark(S);
	while(!q.empty()) pop();
}
ll calc(int s)
{
	ll ans=0;
	{
	auto&g=vx[x[s]-D];
	ans+=upper_bound(g.begin(),g.end(),y[s]+D)
	-lower_bound(g.begin(),g.end(),y[s]-D);
	}
	{
	auto&g=vx[x[s]+D];
	ans+=upper_bound(g.begin(),g.end(),y[s]+D)
	-lower_bound(g.begin(),g.end(),y[s]-D);
	}
	{
	auto&g=vy[y[s]-D];
	ans+=upper_bound(g.begin(),g.end(),x[s]+D-1)
	-lower_bound(g.begin(),g.end(),x[s]-D+1);
	}
	{
	auto&g=vy[y[s]+D];
	ans+=upper_bound(g.begin(),g.end(),x[s]+D-1)
	-lower_bound(g.begin(),g.end(),x[s]-D+1);
	}
	return ans;
}
int main()
{
	scanf("%d%d%d",&n,&a,&b);
	for(int i=1;i<=n;++i)
	{
		int p,q;scanf("%d%d",&p,&q);
		x[i]=p-q; y[i]=p+q;
		vx[x[i]].pb(y[i]);bx[x[i]].insert(i);
		vy[y[i]].pb(x[i]);by[y[i]].insert(i);
	}
	for(auto&s:vx) sort(s.se.begin(),s.se.end());
	for(auto&s:vy) sort(s.se.begin(),s.se.end());
	D=max(abs(x[a]-x[b]),abs(y[a]-y[b])); bfs(a);
	ll ans=0;
	for(int i=1;i<=n;++i)
		if(vis[i]) ans+=calc(i);
	printf("%lld\n",ans/2);
}

Measured memory_bytes: 81664