#include <bits/stdc++.h>   #pragma comment(linker,  /STACK:16777216 )   using namespace std;   template <class T>   inline void checkmin(T &a, T b) {     if (a > b) a = b;   }   template <class T>   inline void checkmax(T &a, T b) {     if (a < b) a = b;   }   const int oo = 1 << 30;   const double eps = 1e-7;   const int N = 512;   const int M = 1;   const long long P = 10000000097ll;   int sgn(double x) { return (x > eps) - (x < -eps); }   int fcmp(double a, double b) { return sgn(a - b); }   double sqr(double x) { return x * x; }   struct Point {     double x, y;     Point() {}     Point(double a, double b) : x(a), y(b) {}     Point operator+(const Point &p) const { return Point(x + p.x, y + p.y); }     Point operator-(const Point &p) const { return Point(x - p.x, y - p.y); }     Point operator*(double d) const { return Point(x * d, y * d); }     double operator*(const Point &p) const { return x * p.y - y * p.x; }     Point operator/(double d) const { return Point(x / d, y / d); }     double norm() const { return sqrt(x * x + y * y); }     Point rot(double alpha) const {       return Point(x * cos(alpha) - y * sin(alpha),                    x * sin(alpha) + y * cos(alpha));     }     void cin() { scanf( %lf %lf , &x, &y); }     void cout(char *s =  p =  ) const { printf( %s %f %f , s, x, y); }   };   struct Line {     Point a, b;     Line() {}     Line(const Point &p, const Point &q) : a(p), b(q) {}     bool para(const Line &lin) const {       Point u, v;       u = b - a;       v = lin.b - lin.a;       return sgn(u * v) == 0;     }     bool l_to_s(const Line &seg) const {       return sgn((b - a) * (seg.a - a)) * sgn((b - a) * (seg.b - a)) < 0;     }     bool s_to_s(const Line &seg) const {       return l_to_s(seg) && seg.l_to_s(*this);     }     Point l_on_l(const Line &lin) const {       double s1, s2;       s1 = (lin.a - a) * (lin.b - a);       s2 = (lin.b - b) * (lin.a - b);       return (a * s2 + b * s1) / (s1 + s2);     }     int l_to_p(const Point &p) const { return sgn((b - a) * (p - a)); }   };   Point ar[N][5];   Point br[N][5];   Point tmple[2][N];   Point *x, *y;   double h, f;   int n;   double ans;   double area(Point *p, int pn) {     int i, j, k;     double ans = 0;     for (i = 1; i < pn; i++) ans += (p[i] - p[0]) * (p[i + 1] - p[0]);     if (pn < -11) {       for (i = 0; i < (pn); i++) printf( %.3f %.3f-->  , p[i].x, p[i].y);       puts(  );     }     return ans;   }   void read() {     int i, j, k;     double a, b;     double fix, low;     ans = 0;     scanf( %d , &n);     scanf( %lf %lf , &h, &f);     fix = f / (f - h);     low = (f + h) / (f - h);     for (i = 0; i < (n); i++) {       scanf( %lf %lf , &a, &b);       ar[i][0] = Point(a * fix, 0);       ar[i][1] = Point(b * fix, 0);       ar[i][2] = Point(b, h);       ar[i][3] = Point(a, h);       ar[i][4] = ar[i][0];       br[i][0] = Point(a * fix, 0);       br[i][1] = Point(b * fix, 0);       br[i][2] = Point(b * low, h);       br[i][3] = Point(a * low, h);       br[i][4] = br[i][0];       ans += area(ar[i], 4) + area(br[i], 4);     }   }   void cut(Point *p) {     int xn, yn;     int i, j, k;     int ii, jj;     Line lin, seg;     for (i = 0; i < (n); i++) {       for (j = 0; j < (5); j++) x[j] = p[j];       xn = 4;       for (j = 0; j < (4); j++) {         lin = Line(ar[i][j], ar[i][j + 1]);         yn = 0;         for (ii = 1; ii <= xn; ii++) {           seg = Line(x[ii - 1], x[ii]);           if (lin.l_to_s(seg)) y[yn++] = lin.l_on_l(seg);           if (lin.l_to_p(x[ii]) >= 0) y[yn++] = x[ii];         }         y[yn] = y[0];         swap(x, y);         swap(xn, yn);       }       ans -= area(x, xn);     }   }   void sub() {     int i, j, k;     x = tmple[0];     y = tmple[1];     for (i = 0; i < (n); i++) cut(br[i]);   }   int main() {     int T, _ = 0;     read();     sub();     printf( %.6f n , ans);     return 0;   }   