#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iostream>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <string>
#include <list>
#include <string.h>
using namespace std;
typedef long long int ll; typedef pair <double, double> P;
const int INF = 1000000000; const double EPS = 10e-9;
const double g = 9.8;
int n, v, X, Y;
struct block {
	int l, b, r, t;
	block(int L, int B, int R, int T)
	{
		l = L; b = B; r = R; t = T;
	}
	block() {};
};
block bl[50];
double calc(double vy, double t)
{
	return vy * t - g * t * t / 2;
}
int comp(double lb, double rb, double a)
{
	return lb + EPS > a ? -1 : rb - EPS < a ? 1 : 0;
}
bool check(int x, int y)
{
	double a = g * g / 4, b = g * y - v * v, c = x * x + y * y;
	double D = b * b - 4 * a * c;
	if (D > -EPS && D < 0) D = 0;
	if (D < 0) return false;
	for (int d = -1; d <= 1; d += 2)
	{
		double t2 = (-b + d * sqrt(D)) / (2 * a);
		if (t2 <= 0) continue;
		double t = sqrt(t2);
		double vx = x / t;
		double vy = sqrt(v * v - vx * vx);
		double loc = calc(vy, X / vx);
		if (loc < Y - EPS) continue;
		bool res = true;
		for (int i = 0; i < n; i++)
		{
			if (bl[i].l > X) continue;
			if (X == bl[i].r && loc >= bl[i].b - EPS && bl[i].t + EPS >= Y) res = false;
			int lh = comp(bl[i].b, bl[i].t, calc(vy, bl[i].l / vx));
			int rh = comp(bl[i].b, bl[i].t, calc(vy, bl[i].r / vx));
			int mw = comp(bl[i].l, bl[i].r, vx* vy / g);
			int mh = comp(bl[i].b, bl[i].t, calc(vy, vy / g));
			if (lh * rh <= 0) res = false;
			if (mw == 0 && lh < 0 && mh >= 0) res = false;
		}
		if (res) return res;
	}
	return false;
}
int main() 
{
	cin >> n >> v >> X >> Y;
	for (int i = 0; i < n; i++)
	{
		int l, b, r, t; cin >> l >> b >> r >> t;
		r = min(r, X);
		bl[i] = block(l, b, r, t);
	}
	bool res = check(X, Y);
	for (int i = 0; i < n; i++)
	{
		res |= check(bl[i].l, bl[i].t);
		res |= check(bl[i].r, bl[i].t);
	}
	puts(res ? "Yes" : "No");
	return 0;
}