/*
 * main.cpp
 *
 *  Created on: Sep 18, 2008
 *      Author: Chris
 */

#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

struct node {
	double left;
	double right;
};

bool compare(const node& a, const node& b) {
	return a.left < b.left;
}

bool compare2(const node& a, const node&b) {
	return a.right > b.right;
}

node nodes[10000];

int num_nodes;
int h, l;

int main() {
	double eps = 1e-7;

	while (scanf("%d %d %d", &num_nodes, &l, &h) == 3) {
		for (int i = 0; i < num_nodes; i++) {
			int r, x;
			scanf("%d %d", &x, &r);
			double d = sqrt((double)r * r - h * h / 4.0);
			d = d > 0 ? d : 0;
			nodes[i].left = x - d - eps;
			nodes[i].right = x + d + eps;
		}
		sort(nodes + 0, nodes + num_nodes, &compare);

		double pos = 0;
		int count = 0;

		int i = 0, j = 0;

		while (true) {
			if (pos > l || i >= num_nodes) break;
			if (nodes[i].left > pos) break;

			while (j < num_nodes && nodes[j].left < pos) j++;

			sort(nodes + i, nodes + j, &compare2);
			pos = nodes[i].right;
			i = j;
			count++;
		}
		if (pos < l) printf("-1\n");
		else printf("%d\n", count);
	}
	return 0;
}
