#include <bits/stdc++.h>

using namespace std;

const int N = 100010;

int n;
int aa, bb;
int cnt[N];
int a[N][2];
bool was[N];
vector< pair< pair<int, int>, int > > y[2];
set< pair< pair<int, int>, int > > z[2];

int calc(int i, int j) {
  return max(abs(a[i][0] - a[j][0]), abs(a[i][1] - a[j][1]));
}

int main() {
  scanf("%d %d %d", &n, &aa, &bb);
  aa--; bb--;
  for (int i = 0; i < n; i++) {
    int xx, yy;
    scanf("%d %d", &xx, &yy);
    a[i][0] = xx + yy;
    a[i][1] = xx - yy;
    for (int rot = 0; rot < 2; rot++) {
      z[rot].insert(make_pair(make_pair(a[i][rot], a[i][1 - rot]), i));
    }
  }
  for (int rot = 0; rot < 2; rot++) {
    y[rot] = vector< pair< pair<int, int>, int > >(z[rot].begin(), z[rot].end());
  }
  int want = calc(aa, bb);
  for (int i = 0; i < n; i++) {
    for (int rot = 0; rot < 2; rot++) {
      for (int sgn = -1; sgn <= 1; sgn += 2) {
        vector< pair< pair<int, int>, int > >::iterator low =
          lower_bound(y[rot].begin(), y[rot].end(), make_pair(make_pair(a[i][rot] + sgn * want, a[i][1 - rot] - want), -1));
        vector< pair< pair<int, int>, int > >::iterator high =
          upper_bound(y[rot].begin(), y[rot].end(), make_pair(make_pair(a[i][rot] + sgn * want, a[i][1 - rot] + want), n));
        cnt[i] += (int)(high - low);
      }
    }
    for (int sgn_x = -1; sgn_x <= 1; sgn_x += 2) {
      for (int sgn_y = -1; sgn_y <= 1; sgn_y += 2) {
        int xx = a[i][0] + sgn_x * want;
        int yy = a[i][1] + sgn_y * want;
        vector< pair< pair<int, int>, int > >::iterator it = 
          lower_bound(y[0].begin(), y[0].end(), make_pair(make_pair(xx, yy), -1));
        if (it != y[0].end() && it->first.first == xx && it->first.second == yy) {
          cnt[i]--;
        }
      }
    }
  }
  queue<int> que;
  que.push(aa);
  was[aa] = true;
  while (!que.empty()) {
    int v = que.front();
    que.pop();
    for (int rot = 0; rot < 2; rot++) {
      for (int sgn = -1; sgn <= 1; sgn += 2) {
        set< pair< pair<int, int>, int > >::iterator low = 
          z[rot].lower_bound(make_pair(make_pair(a[v][rot] + sgn * want, a[v][1 - rot] - want), -1));
        set< pair< pair<int, int>, int > >::iterator high = 
          z[rot].upper_bound(make_pair(make_pair(a[v][rot] + sgn * want, a[v][1 - rot] + want), n));
        for (set< pair< pair<int, int>, int > >::iterator it = low; it != high; it++) {
          int u = it->second;
          if (!was[u]) {
            was[u] = true;
            que.push(u);
          }
        }
        z[rot].erase(low, high);
      }
    }
  }
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    if (was[i]) {
      ans += cnt[i];
    }
  }
  printf("%lld\n", ans / 2);
  return 0;
}
