//作者：中国江苏省南京市李硕睿
#include<cmath>
#include<math.h>
#include<ctype.h>
#include<algorithm>
#include<bitset>
#include<cassert>
#include<cctype>
#include<cerrno>
#include<cfloat>
#include<ciso646>
#include<climits>
#include<clocale>
#include<complex>
#include<csetjmp>
#include<csignal>
#include<cstdarg>
#include<cstddef>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cwchar>
#include<cwctype>
#include<deque>
#include<exception>
#include<fstream>
#include<functional>
#include<iomanip>
#include<ios>
#include<iosfwd>
#include<iostream>
#include<istream>
#include<iterator>
#include<limits>
#include<list>
#include<locale>
#include<map>
#include<memory>
#include<new>
#include<numeric>
#include<ostream>
#include<queue>
#include<set>
#include<sstream>
#include<stack>
#include<stdexcept>
#include<streambuf>
#include<string>
#include<typeinfo>
#include<utility>
#include<valarray>
#include<vector>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define INF 9999999
#define LINF 9999999999999999
#define uint unsigned int
#define msn(a,v) memset(a,v,sizeof(a))
#define ms(a) msn(a,0)
#define NONE -1
#define ll long long
#define ull unsigned ll
#define uchar unsigned char
#define sint short int
#define usint unsigned sint
#define lb lower_bound
#define ub upper_bound
using namespace std;
#define MAXN 100010
int n,D,a,b;
class Dot{
public:
	int x;int y;int id;
	void read(int i){
		scanf("%d %d",&x,&y);
		id = i;
	}
	void rotate(){
		int xx = x+y, yy = x-y;
		x = xx; y = yy;
	}
	void chg(){
		swap(x,y);
	}
}; Dot dot[MAXN];
Dot getdot(int x,int y,int id){
	Dot d1;
	d1.x = x; d1.y = y; d1.id = id;
	return d1;
}
bool operator<(Dot d1,Dot d2){
	if(d1.x != d2.x) return d1.x < d2.x;
	if(d1.y != d2.y) return d1.y < d2.y;
	return d1.id < d2.id;
}
int dsu[MAXN];
void init(){
	for(int i = 1;i <= n;i++)
		dsu[i] = i;
}
int getfa(int pos){
	if(dsu[pos] == pos) return pos;
	dsu[pos] = getfa(dsu[pos]);
	return dsu[pos];
}
void unite(int a,int b){
	a = getfa(a); b = getfa(b);
	dsu[a] = b;
}
int same(int a,int b){
	return getfa(a) == getfa(b);
}
int s(int v){
	if(v) return INF;
	return v;
}
int du[MAXN];
void getdu(){
	ms(du);
	for(int j = 0;j < 2;j++){
		sort(dot,dot+n);
		for(int i = 0;i < n;i++)
			du[dot[i].id] += 
				(lb(dot,dot+n,getdot(dot[i].x-D,dot[i].y+D,s(!j)))-dot)
										-
				(lb(dot,dot+n,getdot(dot[i].x-D,dot[i].y-D,s(j)))-dot)
										+
				(lb(dot,dot+n,getdot(dot[i].x+D,dot[i].y+D,s(!j)))-dot)
										-
				(lb(dot,dot+n,getdot(dot[i].x+D,dot[i].y-D,s(j)))-dot)
			;
		if(j == 1) return;
		for(int i = 0;i < n;i++) dot[i].chg();
	}
}
void getlian(){
	init();
	int sum[MAXN];
	for(int j = 0;j < 2;j++){
	    ms(sum);
	    sort(dot,dot+n);
		for(int i = 0;i < n;i++){
		    int u = lb(dot,dot+n,getdot(dot[i].x-D,dot[i].y-D,0))-dot;
		    int d = lb(dot,dot+n,getdot(dot[i].x-D,dot[i].y+D,INF))-dot;
		    if(u == d) continue;
		    unite(dot[u].id,dot[i].id);
		    sum[u]++; sum[d-1]--;
		}
		for(int i = 0;i < n;i++){
		    if(i) sum[i] += sum[i-1];
		    if(sum[i]) unite(dot[i].id,dot[i+1].id);
		}
		if(j == 1) return;
		for(int i = 0;i < n;i++) dot[i].chg();
	}
}
int main(){ 
	scanf("%d %d %d",&n,&a,&b);
	for (int i=0;i<n;i++){
		dot[i].read(i);
	}
	a--;
	b--;
	D=abs(dot[a].x-dot[b].x)+abs(dot[a].y-dot[b].y);
	for(int i=0;i<n;i++)
		dot[i].rotate();
	getdu();
	getlian();
	ll ans=0;
	for (int i=0;i<n;i++){
		if (same(i,a)){
			ans+=du[i];
		}
	}
	ans/=2;
	printf("%lld\n",ans);
	return 0;
}

Measured memory_bytes: 3200