#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//#include <boost/multiprecision/cpp_int.hpp>
//typedef boost::multiprecision::cpp_int ll;
typedef long double dd;
#define i_7 (ll)(1E9+7)
//#define i_7 998244353
#define i_5 i_7-2
ll mod(ll a){
    ll c=a%i_7;
    if(c>=0)return c;
    return c+i_7;
}
typedef pair<ll,ll> l_l;
ll inf=(ll)1E17;
#define rep(i,l,r) for(ll i=l;i<=r;i++)
#define pb push_back
ll max(ll a,ll b){if(a<b)return b;else return a;}
ll min(ll a,ll b){if(a>b)return b;else return a;}
void Max(ll &pos,ll val){pos=max(pos,val);}//Max(dp[n],dp[n-1]);
void Min(ll &pos,ll val){pos=min(pos,val);}
void Add(ll &pos,ll val){pos=mod(pos+val);}
dd EPS=1E-9;
#define fastio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
///////////////////////////////////////

struct point1{
    ll x,y;
    ll s,t;
    ll num;
    bool operator<(const point1 b)const{
        if(s<b.s)return true;
        if(s==b.s&&t<b.t)return true;
        return false;
    }
    bool operator>(const point1 b)const{
        if(s>b.s)return true;
        if(s==b.s&&t>b.t)return true;
        return false;
    }
};

struct point2{
    ll x,y;
    ll s,t;
    ll num;
    bool operator<(const point2 b)const{
        if(t<b.t)return true;
        if(t==b.t&&s<b.s)return true;
        return false;
    }
    bool operator>(const point2 b)const{
        if(t>b.t)return true;
        if(t==b.t&&s>b.s)return true;
        return false;
    }
};

point1 conv(point2 p){
    point1 q;
    q.s=p.s;q.t=p.t;q.x=p.x;q.y=p.y;q.num=p.num;
    return q;
}
point2 conv(point1 p){
    point2 q;
    q.s=p.s;q.t=p.t;q.x=p.x;q.y=p.y;q.num=p.num;
    return q;
}

int main(){
    ll n,a,b;cin>>n>>a>>b;a--;b--;
    point1 p1[n];point2 p2[n];
    rep(i,0,n-1){
        cin>>p1[i].x>>p1[i].y;
        p1[i].s=p1[i].x+p1[i].y;
        p1[i].t=-p1[i].x+p1[i].y;
        p1[i].num=i;
        p2[i]=conv(p1[i]);
    }
    ll dis=abs(p1[a].x-p1[b].x)+abs(p2[a].y-p2[b].y);
    set<point1>s1;
    set<point2>s2;
    vector<point1>ss1;
    vector<point2>ss2;
    rep(i,0,n-1){
        if(i==a||i==b)continue;
        s1.insert(p1[i]);
        s2.insert(p2[i]);
    }
    
    queue<ll>q;
    q.push(a);q.push(b);
    while(!q.empty()){
        ll f=q.front();q.pop();
        point1 cen=p1[f];
        ss1.pb(cen);ss2.pb(conv(cen));
        point1 b[4];
        rep(i,0,3){
            b[i]=cen;
        }
        b[0].y-=dis;
        b[1].x-=dis;
        b[2].x+=dis;
        b[3].y+=dis;
        rep(i,0,3){
            b[i].s=b[i].y+b[i].x;
            b[i].t=b[i].y-b[i].x;
        }
        for(auto ite=s1.lower_bound(b[0]);ite!=s1.end();){
            point1 era=*ite;
            if(b[1]<era)break;
            point2 e=conv(era);
            s2.erase(e);
            ite=s1.erase(ite);
            q.push(era.num);
        }
        for(auto ite=s1.lower_bound(b[2]);ite!=s1.end();){
            point1 era=*ite;
            if(b[3]<era)break;
            point2 e=conv(era);
            s2.erase(e);
            ite=s1.erase(ite);
            q.push(era.num);
        }
        //////
        point2 c[4];
        rep(i,0,3){
            c[i]=conv(b[i]);
        }
        for(auto ite=s2.lower_bound(c[0]);ite!=s2.end();){
            point2 era=*ite;
            if(c[2]<era)break;
            point1 e=conv(era);
            s1.erase(e);
            ite=s2.erase(ite);
            q.push(era.num);
        }
        for(auto ite=s2.lower_bound(c[1]);ite!=s2.end();){
            point2 era=*ite;
            if(c[3]<era)break;
            point1 e=conv(era);
            s1.erase(e);
            ite=s2.erase(ite);
            q.push(era.num);
        }
    }
    //////////////////
    ll ans=0;
    bool used[n];memset(used,false,sizeof(used));
    for(auto tt:ss1){
        used[tt.num]=true;
    }
    sort(ss1.begin(),ss1.end());
    sort(ss2.begin(),ss2.end());
    rep(f,0,n-1){
        if(used[f]==false)continue;
        point1 cen=p1[f];
        point1 b[4];
        rep(i,0,3){
            b[i]=cen;
        }
        b[0].y-=dis;
        b[1].x-=dis;
        b[2].x+=dis;
        b[3].y+=dis;
        rep(i,0,3){
            b[i].s=b[i].y+b[i].x;
            b[i].t=b[i].y-b[i].x;
        }
        ans+=upper_bound(ss1.begin(),ss1.end(),b[1])-lower_bound(ss1.begin(),ss1.end(),b[0]);
        ans+=upper_bound(ss1.begin(),ss1.end(),b[3])-lower_bound(ss1.begin(),ss1.end(),b[2]);
        //////
        point2 c[4];
        rep(i,0,3){
            c[i]=conv(b[i]);
        }
        ans+=lower_bound(ss2.begin(),ss2.end(),c[2])-upper_bound(ss2.begin(),ss2.end(),c[0]);
        ans+=lower_bound(ss2.begin(),ss2.end(),c[3])-upper_bound(ss2.begin(),ss2.end(),c[1]);
        //cout<<f<<" "<<ans<<endl;
    }
    cout<<ans/2<<endl;
    
    return 0;
}

















Measured memory_bytes: 34240