#include <iostream>
#include <math.h>
using namespace std;


const double EPS = 1e-10;
const int MAX_N = 55;
const double g = 9.8;


//一对抛物线
struct Para
{
	bool t;
	double a[2];
	double b[2];
};

//点
struct P
{
	double x;
	double y;
};

//矩形的顶点
P rectp[MAX_N][4];

int N, V, X, Y, _n;


Para getpara(P p, int v);

bool check(Para q);

bool cmp(double & lb, double & rb, double & a);

int main()
{
	int L, B, R, T;

	cin >> N >> V >> X >> Y;

	for (int i = 0; i < N; i++)
	{
		cin >> L >> B >> R >> T;

		if (L < X && T > (double)Y * L / X)
		{
			if (R > X)
			{
				R = X;
			}

			rectp[_n][0].x = L;
			rectp[_n][1].x = R;
			rectp[_n][2].x = L;
			rectp[_n][3].x = R;

			rectp[_n][0].y = T;
			rectp[_n][1].y = T;
			rectp[_n][2].y = B;
			rectp[_n][3].y = B;

			_n++;
		}
	}

	P t;
	t.x = X;
	t.y = Y;

	bool ans = false;

	if (check(getpara(t, V)))
	{
		ans = true;
	}
	else
	{
		for (int i = 0; i < _n; i++)
		{
			if (check(getpara(rectp[i][0], V)))
			{
				ans = true;
				break;
			}

			if (check(getpara(rectp[i][1], V)))
			{
				ans = true;
				break;
			}
		}
	}

	if (ans)
	{
		cout << "Yes\n";
	}
	else
	{
		cout << "No\n";
	}

	return 0;
}

Para getpara(P p, int v)
{
	Para res;

	double D = v * v * (v * v - 2 * g * p.y) - g * g * p.x * p.x;

	if (D > 0)
	{
		res.t = true;

		D = sqrt(D);
		res.b[0] = (v * v + D) / (g * p.x);
		res.b[1] = (v * v - D) / (g * p.x);

		res.a[0] = (p.y - res.b[0] * p.x) / (p.x * p.x);
		res.a[1] = (p.y - res.b[1] * p.x) / (p.x * p.x);
	}
	else
	{
		res.t = false;
	}

	return res;
}

bool check(Para q)
{
	if (q.t)
	{
		bool ok = false;
		P cross;

		for (int p = 0; p < 2; p++)
		{
			double tar = q.a[p] * X * X + q.b[p] * X;

			if (tar > Y - EPS)
			{
				ok = true;

				for (int i = 0; i < _n; i++)
				{
					if (rectp[i][0].x < X && rectp[i][1].x > X && Y <= rectp[i][2].y && tar >= rectp[i][0].y)
					{
						ok = false;
						break;
					}

					cross.x = rectp[i][0].x;
					cross.y = cross.x * (q.a[p] * cross.x + q.b[p]);
					if (cmp(rectp[i][2].y, rectp[i][0].y, cross.y))
					{
						ok = false;
						break;
					}

					cross.x = rectp[i][1].x;
					cross.y = cross.x * (q.a[p] * cross.x + q.b[p]);
					if (cmp(rectp[i][3].y, rectp[i][1].y, cross.y))
					{
						ok = false;
						break;
					}

					double D = q.b[p] * q.b[p] + 4 * q.a[p] * rectp[i][0].y;
					if (D >= 0)
					{
						D = sqrt(D);
						cross.y = rectp[i][0].y;

						cross.x = -(q.b[p] + D) / (2 * q.a[p]);
						if (cmp(rectp[i][0].x, rectp[i][1].x, cross.x))
						{
							ok = false;
							break;
						}

						cross.x += D / q.a[p];
						if (cmp(rectp[i][0].x, rectp[i][1].x, cross.x))
						{
							ok = false;
							break;
						}
					}

					D = q.b[p] * q.b[p] + 4 * q.a[p] * rectp[i][2].y;
					if (D >= 0)
					{
						D = sqrt(D);
						cross.y = rectp[i][2].y;

						cross.x = -(q.b[p] + D) / (2 * q.a[p]);
						if (cmp(rectp[i][2].x, rectp[i][3].x, cross.x))
						{
							ok = false;
							break;
						}

						cross.x += D / q.a[p];
						if (cmp(rectp[i][2].x, rectp[i][3].x, cross.x))
						{
							ok = false;
							break;
						}
					}
				}

				if (ok)
				{
					return true;
				}
			}
		}
	}
	return false;
}

bool cmp(double & lb, double & rb, double & a)
{
	return a > lb + EPS && a < rb - EPS;
}



Measured memory_bytes: 3108