import std.stdio, std.array, std.string, std.conv, std.algorithm;
import std.typecons, std.range, std.random, std.math, std.container;
import std.numeric, std.bigint, core.bitop, core.stdc.stdio;

alias Tuple!(int, "x", int, "y") Point;

void main() {
    auto s = readln.split.map!(to!int);
    auto N = s[0];
    auto A = s[1]-1;
    auto B = s[2]-1;
    auto X = new int[](N);
    auto Y = new int[](N);
    int[][int] X_Y;
    int[][int] Y_X;
    foreach (i; 0..N) {
        s = readln.split.map!(to!int);
        X[i] = s[0] + s[1];
        Y[i] = s[0] - s[1];
        X_Y[X[i]] ~= Y[i];
        Y_X[Y[i]] ~= X[i];
    }

    foreach (k; X_Y.keys) X_Y[k].sort();
    foreach (k; Y_X.keys) Y_X[k].sort();
 
    int manh = max(abs(X[A]-X[B]), abs(Y[A]-Y[B]));
    bool[int][int] used;
    DList!Point q;
    q.insert(Point(X[A], Y[A]));
    int ans = 0;
    
    while (!q.empty) {
        auto n = q.front;
        auto x = n.x;
        auto y = n.y;
        q.removeFront;
        if (x in used && y in used[x])
            continue;
        used[x][y] = true;

        foreach (d; [manh, -manh]) {
            auto nx = x + d;
            if (!(nx in X_Y)) continue;
            int hi = X_Y[nx].length.to!int - 1;
            int lo = -1;
            while (hi - lo > 1) {
                int mid = (hi + lo) / 2;
                if (X_Y[nx][mid] >= y - manh)
                    hi = mid;
                else
                    lo = mid;
            }

            for (int i = hi; i < X_Y[nx].length && X_Y[nx][i] <= y + manh; i++) {
                ans += 1;
                //writeln("(", x, ", ", y, ") ","(", nx, ", ", X_Y[nx][i], ") ");
                q.insert(Point(nx, X_Y[nx][i]));
            }
        }

        foreach (d; [manh, -manh]) {
            auto ny = y + d;
            if (!(ny in Y_X)) continue;
            int hi = Y_X[ny].length.to!int;
            int lo = 0;
            while (hi - lo > 1) {
                int mid = (hi + lo) / 2;
                if (Y_X[ny][mid] > x - manh)
                    hi = mid;
                else
                    lo = mid;
            }

            for (int i = hi; i < Y_X[ny].length && Y_X[ny][i] < x + manh; i++) {
                ans += 1;
                //writeln("(", x, ", ", y, ") ","(", Y_X[ny][i], ", ", ny, ") ");
                q.insert(Point(Y_X[ny][i], ny));
            }
        }        
    }

    writeln(ans/2);
}
