#include <bits/stdc++.h>
using namespace std;
pair<int, int> p[200001];
int s[200001];
int cb(int n, int x) {
  int st = 1, dr = n, mij;
  while (st <= dr) {
    mij = (st + dr) >> 1;
    if (s[mij] <= x)
      st = mij + 1;
    else
      dr = mij - 1;
  }
  return dr;
}
int a[800001];
void update(int nod, int st, int dr, int poz, int val) {
  if (st == dr)
    a[nod] = max(a[nod], val);
  else {
    int mij = (st + dr) >> 1;
    if (poz <= mij)
      update(nod << 1, st, mij, poz, val);
    else
      update(nod << 1 | 1, mij + 1, dr, poz, val);
    a[nod] = max(a[nod << 1], a[nod << 1 | 1]);
  }
}
int query(int nod, int st, int dr, int qst, int qdr) {
  if (qst <= st && dr <= qdr) return a[nod];
  int mij = (st + dr) >> 1;
  int eins, zwei;
  eins = zwei = 0;
  if (qst <= mij) eins = query(nod << 1, st, mij, qst, qdr);
  if (mij < qdr) zwei = query(nod << 1 | 1, mij + 1, dr, qst, qdr);
  return max(eins, zwei);
}
int main() {
  int n, i, x, y;
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> p[i].first >> p[i].second;
    s[i] = p[i].first + p[i].second;
  }
  sort(p + 1, p + n + 1);
  sort(s + 1, s + n + 1);
  for (i = 1; i <= n; i++) {
    x = cb(n, p[i].first - p[i].second);
    if (x > 0) {
      x = query(1, 1, n, 1, x);
      y = cb(n, p[i].first + p[i].second);
      update(1, 1, n, y, x + 1);
    }
  }
  cout << query(1, 1, n, 1, n) + 1;
  return 0;
}
