#include <algorithm>
#include <vector>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
using namespace std;
const double PI = acos(-1);
const double G = 9.8;
struct Node {
    double lx, ly, rx, ry;
};
Node a[55];
double f(double A,double B,double x,double y)
{
    return y - A * x * x - B * x;
}
double X, Y;
double v;
int n;
int judge(double x)
{
    double B = tan(x);
    double v1 = v * sin(x);
    double v2 = v * cos(x);
    double t = 2.0 * v1 / G;
    double xx = v2 * t;
    double A = (- B / xx);

    for(int i = 1; i <= n; i++)
    {
        if(a[i].lx > X) continue;
        if(f(A,B,a[i].lx,a[i].ly) * f(A,B,a[i].lx,a[i].ry) <= 0)return 0;
        if(f(A,B,a[i].rx,a[i].ry) * f(A,B,a[i].lx,a[i].ry) <= 0 && a[i].ry > Y)return 0;
        double del = B * B - 4 * A * (-a[i].ly);
        if(del < 0) continue;
        double x1 = (-B + sqrt(del)) / A / 2;
        double x2 = (-B - sqrt(del)) / A / 2;
        if(x1 >= a[i].lx && x1 <= a[i].rx) return 0;
        if(x2 >= a[i].lx && x2 <= a[i].rx) return 0;
      //  printf("%f %f\n", x1, x2);
    }
    for(int i = 1; i <= n; i++) {
        if(a[i].lx <= X && a[i].rx >= X) {
            double yx = A * X * X + B * X;
            if(a[i].ly >= Y && a[i].ly <= yx) return 0;
            if(a[i].ry >= Y && a[i].ry <= yx) return 0;
        }

    }
    if(A * X * X + B * X < Y) return 0;
//    printf("%f\n", x);
//    printf("%f\n", A + B);
//    printf("%f\n", A * 4 + 2 * B);\
//    printf("%f %f %f\n", v, v1, v2);
//    printf("%f\n", xx);
    return 1;
}
int main()
{

    //freopen("in.txt", "r", stdin);
    double x,y;
    while(scanf("%d %lf %lf %lf",&n,&v,&x,&y) != EOF)
    {
        X = x; Y = y;
        for(int i = 1; i <= n; i++)
        {
            scanf("%lf %lf %lf %lf",&a[i].lx,&a[i].ly,&a[i].rx,&a[i].ry);
            if(a[i].lx <= X && a[i].rx >= X) a[i].rx = X;
        }
        if(abs(X) < 1e-8) {
            double h = v * v / G / 2;
            if(h < Y) {
                printf("No\n");
                continue;
            }
            int flag = 1;
            for(int i = 1; i <= n; i++) {
                if(abs(a[i].lx) < 1e-8) {
                    if(a[i].ly <= Y) flag = 0;
                    if(a[i].ry <= Y) flag = 0;
                }
            }
            printf("%s\n", flag ? "Yes" : "No");
            continue;
        }
        double m = PI / 2;
        int flag = 0;
        for(double i = m / 1000000; i < m; i += m / 1000000)
        {
            if(judge(i)){flag = 1; break;}
        }
        if(flag)printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}