#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-13;
int n, top[505];
bool cur;
double ans, h, d, l[505], r[505];
struct Point {
  double x, y;
  Point() {}
  Point(double x, double y) : x(x), y(y) {}
  Point operator-(Point a) { return Point(x - a.x, y - a.y); }
  Point operator+(Point a) { return Point(x + a.x, y + a.y); }
  Point operator*(double a) { return Point(x * a, y * a); }
} f[2][505];
struct Line {
  double k, b;
  Line() {}
  Line(double k, double b) : k(k), b(b) {}
};
int zero(double x) {
  if (fabs(x) < eps) return 0;
  return x > eps ? 1 : -1;
}
double cha(Point a, Point b) { return a.x * b.y - b.x * a.y; }
Point getjiao(Point P, Point v, Point Q, Point w) {
  Point u = P - Q;
  double t = cha(w, u) / cha(v, w);
  return P + (v * t);
}
Line getline(Point st, Point ed) {
  double k = (st.y - ed.y) / (st.x - ed.x);
  double b = st.y - k * st.x;
  return Line(k, b);
}
void doit(int c) {
  top[cur ^= 1] = 0;
  memset(f[cur], 0, sizeof(f[cur]));
  for (int i = 1; i <= top[cur ^ 1]; i++) {
    if (zero(f[cur ^ 1][i].x) * c >= 0) f[cur][++top[cur]] = f[cur ^ 1][i];
    int j = i % top[cur ^ 1] + 1;
    Point st = f[cur ^ 1][i];
    Point ed = f[cur ^ 1][j];
    if (zero(st.x * ed.x) < 0)
      f[cur][++top[cur]] = getjiao(Point(0, 0), Point(0, 1000), st, ed - st);
  }
}
void jiao(double k, double b, Point yst, Point yed, int c) {
  top[cur ^= 1] = 0;
  memset(f[cur], 0, sizeof(f[cur]));
  for (int i = 1; i <= top[cur ^ 1]; i++) {
    if (zero(k * f[cur ^ 1][i].x + b - f[cur ^ 1][i].y) * c >= 0)
      f[cur][++top[cur]] = f[cur ^ 1][i];
    int j = i % top[cur ^ 1] + 1;
    Point st = f[cur ^ 1][i];
    Point ed = f[cur ^ 1][j];
    if (zero((k * st.x + b - st.y) * (k * ed.x + b - ed.y)) < 0)
      f[cur][++top[cur]] = getjiao(st, ed - st, yst, yed - yst);
  }
}
double Hull(Point *p, int s) {
  double sum = 0;
  Point st = p[1];
  for (int i = 2; i < s; i++) sum += cha(p[i] - st, p[i + 1] - st);
  return fabs(sum / 2);
}
int main() {
  scanf("%d %lf %lf", &n, &h, &d);
  for (int i = 1; i <= n; i++) {
    scanf("%lf %lf", &l[i], &r[i]);
    ans +=
        ((r[i] - l[i]) * (d + h) / (d - h)) * (d + h) - (r[i] - l[i]) * (d - h);
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      top[cur] = 4;
      f[cur][1] = Point(-100000, h);
      f[cur][2] = Point(100000, h);
      f[cur][3] = Point(100000, -h);
      f[cur][4] = Point(-100000, -h);
      if (!zero(l[i]))
        doit(1);
      else {
        Point st = Point(0, d);
        Point ed = Point(l[i], h);
        Line fc = getline(st, ed);
        jiao(fc.k, fc.b, st, ed, -zero(l[i]));
      }
      if (!zero(r[i]))
        doit(-1);
      else {
        Point st = Point(0, d);
        Point ed = Point(r[i], h);
        Line fc = getline(st, ed);
        jiao(fc.k, fc.b, st, ed, zero(r[i]));
      }
      if (!zero(l[j]))
        doit(1);
      else {
        Point st = Point(0, -d);
        Point ed = Point(l[j], -h);
        Line fc = getline(st, ed);
        jiao(fc.k, fc.b, st, ed, zero(l[j]));
      }
      if (!zero(r[j]))
        doit(-1);
      else {
        Point st = Point(0, -d);
        Point ed = Point(r[j], -h);
        Line fc = getline(st, ed);
        jiao(fc.k, fc.b, st, ed, -zero(r[j]));
      }
      ans -= Hull(f[cur], top[cur]);
    }
  printf("%.9lf\n", ans);
  return 0;
}
