#define _USE_MATH_DEFINES
#include <cstdio>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <complex>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <limits>
#include <climits>
#include <cfloat>
#include <functional>
#include <iterator>
using namespace std;

const long long INF = LLONG_MAX / 4;

int main()
{
    int n, a, b;
    cin >> n >> a >> b;
    -- a;
    -- b;
    vector<long long> hy(n), hx(n);
    for(int i=0; i<n; ++i){
        int x, y;
        cin >> x >> y;
        hy[i] = x - y;
        hx[i] = x + y;
    }
    long long d = max(abs(hy[a] - hy[b]), abs(hx[a] - hx[b]));

    vector<map<pair<long long, long long>, int> > m(2);
    m[0][make_pair(-INF, -INF)] = -1;
    m[1][make_pair(-INF, -INF)] = -1;
    m[0][make_pair(INF, INF)] = -1;
    m[1][make_pair(INF, INF)] = -1;
    for(int i=0; i<n; ++i){
        m[0][make_pair(hy[i], hx[i])] = i;
        m[1][make_pair(hx[i], hy[i])] = i;
    }

    queue<int> q;
    vector<bool> check(n, false);
    q.push(a);
    q.push(b);
    check[a] = check[b] = true;
    while(!q.empty()){
        int i = q.front();
        q.pop();
        long long y = hy[i];
        long long x = hx[i];
        for(int k=0; k<4; ++k){
            map<pair<long long, long long>, int>::iterator it;
            if(k == 0)
                it = m[0].lower_bound(make_pair(y - d, x - d));
            else if(k == 1)
                it = m[0].lower_bound(make_pair(y + d, x - d));
            else if(k == 2)
                it = m[1].lower_bound(make_pair(x - d, y - d));
            else
                it = m[1].lower_bound(make_pair(x + d, y - d));

            for(;;){
                long long y2 = it->first.first;
                long long x2 = it->first.second;
                if(k > 1)
                    swap(y2, x2);
                if(max(abs(y2 - y), abs(x2 - x)) != d)
                    break;
                int j = it->second;
                if(!check[j]){
                    check[j] = true;
                    q.push(j);
                }
                it = m[k/2].erase(it);
            }
        }
    }

    m.assign(2, map<pair<long long, long long>, int>());
    m[0][make_pair(-INF, -INF)];
    m[1][make_pair(-INF, -INF)];
    m[0][make_pair(INF, INF)];
    m[1][make_pair(INF, INF)];
    for(int i=0; i<n; ++i){
        if(check[i]){
            m[0][make_pair(hy[i], hx[i])];
            m[1][make_pair(hx[i], hy[i])];
        }
    }
    int tmp = 0;
    for(auto& p : m[0]){
        p.second = tmp;
        ++ tmp;
    }
    tmp = 0;
    for(auto& p : m[1]){
        p.second = tmp;
        ++ tmp;
    }

    long long ans = 0;
    for(int i=0; i<n; ++i){
        if(!check[i])
            continue;

        long long y = hy[i];
        long long x = hx[i];
        for(int k=0; k<4; ++k){
            map<pair<long long, long long>, int>::iterator it1, it2;
            if(k == 0){
                it1 = m[0].lower_bound(make_pair(y - d, x - d));
                it2 = m[0].lower_bound(make_pair(y - d, x + d + 1));
            }
            else if(k == 1){
                it1 = m[0].lower_bound(make_pair(y + d, x - d));
                it2 = m[0].lower_bound(make_pair(y + d, x + d + 1));
            }
            else if(k == 2){
                it1 = m[1].lower_bound(make_pair(x - d, y - d + 1));
                it2 = m[1].lower_bound(make_pair(x - d, y + d));
            }
            else{
                it1 = m[1].lower_bound(make_pair(x + d, y - d + 1));
                it2 = m[1].lower_bound(make_pair(x + d, y + d));
            }
            ans += it2->second - it1->second;
        }
    }
    ans /= 2;
    cout << ans << endl;

    return 0;
}


Measured memory_bytes: 14592