//*
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <numeric>
#include <functional>
#define MOD 1000000007
#define MAX 0x3f3f3f3f
#define MAX2 0x3f3f3f3f3f3f3f3fll
#define ERR 1e-10
#define mp make_pair
#define all(x) (x).begin(), (x).end()
#pragma warning(disable:4996)
using namespace std;

typedef long long ll;
typedef long double ldb;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;

int n;
pll a[200000];
int px, py;
ll d;

map<ll, set<pll>> xmq, ymq;
map<ll, map<ll, ll>> xmq2, ymq2;

int main()
{
	int i, j, k, l;
	cin>>n>>px>>py, px--, py--;
	for(i=0;i<n;i++) scanf("%lld%lld", &a[i].first, &a[i].second), tie(a[i].first, a[i].second)=mp(a[i].first+a[i].second, a[i].first-a[i].second);
	d=max(abs(a[px].first-a[py].first), abs(a[px].second-a[py].second));
	vector<int> v;
	v.push_back(px), v.push_back(py);
	for(i=0;i<n;i++)
	{
		if(i != px && i != py)
		{
			xmq[a[i].first].emplace(a[i].second, i);
			ymq[a[i].second].emplace(a[i].first, i);
		}
		xmq2[a[i].first][a[i].second]++;
		ymq2[a[i].second][a[i].first]++;
	}
	for(auto &e : xmq2)
	{
		e.second[-MAX2]=e.second[MAX2]=0;
		ll now=0;
		for(auto &f : e.second)
		{
			now+=f.second;
			f.second=now;
		}
	}
	for(auto &e : ymq2)
	{
		e.second[-MAX2]=e.second[MAX2]=0;
		ll now=0;
		for(auto &f : e.second)
		{
			now+=f.second;
			f.second=now;
		}
	}
	for(i=0;i<v.size();i++)
	{
		int now=v[i];
		ll x=a[now].first, y=a[now].second;
		set<ll> xnew;
		auto ix=xmq[x-d].lower_bound(mp(y-d, -MAX));
		for(;ix != xmq[x-d].end() && ix->first <= y+d;ix++)
		{
			xnew.insert(ix->second);
		}
		ix=xmq[x+d].lower_bound(mp(y-d, -MAX));
		for(;ix != xmq[x+d].end() && ix->first <= y+d;ix++)
		{
			xnew.insert(ix->second);
		}
		ix=ymq[y-d].lower_bound(mp(x-d, -MAX));
		for(;ix != ymq[y-d].end() && ix->first <= x+d;ix++)
		{
			xnew.insert(ix->second);
		}
		ix=ymq[y+d].lower_bound(mp(x-d, -MAX));
		for(;ix != ymq[y+d].end() && ix->first <= x+d;ix++)
		{
			xnew.insert(ix->second);
		}
		for(auto e : xnew)
		{
			v.push_back(e);
			xmq[a[e].first].erase(mp(a[e].second, e));
			ymq[a[e].second].erase(mp(a[e].first, e));
		}
	}
	ll ans=0;
	for(auto e : v)
	{
		ll x=a[e].first, y=a[e].second;
		auto dodo=[](map<ll, map<ll, ll>> &mq, ll x, ll y1, ll y2)
		{
			if(!mq.count(x)) return 0ll;
			auto ix1=prev(mq[x].lower_bound(y1));
			auto ix2=prev(mq[x].lower_bound(y2+1));
			return ix2->second-ix1->second;
		};
		ans+=dodo(xmq2, x-d, y-d, y+d-1);
		ans+=dodo(ymq2, y+d, x-d, x+d-1);
		ans+=dodo(xmq2, x+d, y-d+1, y+d);
		ans+=dodo(ymq2, y-d, x-d+1, x+d);
	}
	cout<<ans/2<<endl;
	return 0;
}
//*/