#include <bits/stdc++.h>
using namespace std;
const long long cg = 1e9;
const int maxn = 2e5 + 100;
struct Node {
  int x, f;
  int op;
};
vector<Node> nodes;
map<long long, int> dp;
bool cmp(Node a, Node b) { return a.x < b.x; }
int main() {
  int n, x, w, pre = 0;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &x, &w);
    Node temp1, temp2;
    temp1.x = x - w, temp1.f = -1;
    temp2.x = x + w, temp2.f = 1, temp2.op = temp1.x;
    nodes.push_back(temp1), nodes.push_back(temp2);
  }
  sort(nodes.begin(), nodes.end(), cmp);
  dp[nodes[0].x + cg] = 0;
  for (int i = 1; i < nodes.size(); i++) {
    dp[nodes[i].x + cg] = pre;
    if (nodes[i].f == 1)
      dp[nodes[i].x + cg] = max(dp[nodes[i].x + cg], dp[nodes[i].op + cg] + 1);
    pre = dp[nodes[i].x + cg];
  }
  printf("%d\n", dp[nodes[nodes.size() - 1].x + cg]);
  return 0;
}
