#include <bits/stdc++.h>
using namespace std;
class Vector2 {
 public:
  double x, y;
  Vector2(double x = 0, double y = 0) : x(x), y(y) {}
  Vector2 operator+(Vector2 v) { return Vector2(x + v.x, y + v.y); }
  Vector2 operator-(Vector2 v) { return Vector2(x - v.x, y - v.y); }
  Vector2 operator*(double k) { return Vector2(x * k, y * k); }
  Vector2 operator/(double k) { return Vector2(x / k, y / k); }
  double length() { return sqrt(norm()); }
  double norm() { return x * x + y * y; }
  double dot(Vector2 v) { return x * v.x + y * v.y; }
  double cross(Vector2 v) { return x * v.y - y * v.x; }
  bool operator<(const Vector2 &v) const {
    return x != v.x ? x < v.x : y < v.y;
  }
  bool operator==(const Vector2 &v) const {
    return fabs(x - v.x) < 0.0000000001 && fabs(y - v.y) < 0.0000000001;
  }
};
ostream &operator<<(ostream &out, Vector2 const &v) {
  out << "Vector2(" << v.x << ", " << v.y << ')';
  return out;
}
istream &operator>>(istream &in, Vector2 &v) {
  double x, y;
  in >> x;
  in >> y;
  v.x = x;
  v.y = y;
  return in;
}
struct Point {
  long long start, end;
  Point() {}
  Point(long long s, long long e) : start(s), end(e) {}
  bool operator<(const Point &v) const {
    return (end == v.end) ? start < v.start : end < v.end;
  }
};
long long N;
vector<Point> points;
void input() {
  cin >> N;
  long long x_, w_;
  for (long long n = 0; n < N; n++) {
    cin >> x_ >> w_;
    long long a = x_ - w_, b = x_ + w_ - 1;
    if (a < 0) a = 0;
    if (b > 1000000000) b = 1000000000;
    points.push_back(Point(a, b));
  }
}
void solve() {
  sort(points.begin(), points.end());
  long long count = 0, right = -1;
  for (auto p : points) {
    if (right < p.start) {
      count++;
      right = p.end;
    }
  }
  cout << count << endl;
}
int main() {
  input();
  solve();
  return 0;
}
