#include <bits/stdc++.h>
using namespace std;
int N, d1, d2, rez;
struct Point {
  int x, y;
  Point() { x = y = 0; }
  Point(int _x, int _y) { x = _x, y = _y; }
} a[100010], b[100010];
int dist(Point A, Point B) {
  return (A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y);
}
bool blizu = 0, daleko = 1;
void flip() {
  blizu ^= 1;
  daleko ^= 1;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> N >> d1 >> d2;
  for (int i = 1; i <= N; i++) {
    cin >> a[i].x >> a[i].y >> b[i].x >> b[i].y;
  }
  for (int i = 1; i <= N - 1; i++) {
    int dx = a[i].x - b[i].x, dy = a[i].y - b[i].y;
    int vx = (a[i + 1].x - a[i].x) - (b[i + 1].x - b[i].x);
    int vy = (a[i + 1].y - a[i].y) - (b[i + 1].y - b[i].y);
    if (vx * vx + vy * vy == 0) {
      if (daleko && dist(a[i], b[i]) <= d1 * d1) rez++, flip();
      if (blizu && dist(a[i], b[i]) > d2 * d2) flip();
      continue;
    }
    if (-dy * vy - dx * vx < 0) {
      if (daleko && dist(a[i], b[i]) <= d1 * d1) rez++, flip();
      if (blizu && dist(a[i + 1], b[i + 1]) > d2 * d2) flip();
    } else if (-dy * vy - dx * vx > vx * vx + vy * vy) {
      if (blizu && dist(a[i], b[i]) > d2 * d2) flip();
      if (daleko && dist(a[i + 1], b[i + 1]) <= d1 * d1) rez++, flip();
    } else {
      if (blizu && dist(a[i], b[i]) > d2 * d2) flip();
      double t = -1.0 * (dy * vy + dx * vx) / (vx * vx + vy * vy);
      double x = dx + vx * t, y = dy + vy * t;
      if (daleko && x * x + y * y - 1e-9 <= d1 * d1) rez++, flip();
      if (blizu && dist(a[i + 1], b[i + 1]) > d2 * d2) flip();
    }
  }
  cout << rez;
  return 0;
}
