#include <bits/stdc++.h>
using namespace std;
double eps = 1e-9;
int n, ly;
double H, F, ans;
struct itv {
  double l, r;
} a[1100];
bool operator<(itv x, itv y) { return x.l < y.l; }
void init() {
  scanf("%d%lf%lf", &n, &H, &F);
  for (int i = 1; i <= (n); ++i) scanf("%lf%lf", &a[i].l, &a[i].r);
  sort(a + 1, a + n + 1);
  int p(1);
  for (int i = 1; i <= (n); ++i)
    if (a[p].r > a[i].l) {
      a[p].r = max(a[p].r, a[i].r);
    } else {
      a[++p] = a[i];
    }
  n = p;
}
double cal(double l1, double r1, double l2, double r2) {
  if (l1 < l2) swap(l1, l2), swap(r1, r2);
  if (r1 >= r2)
    return (-l1 - r1) * H;
  else
    return (-l1 - r1) * H - (r2 - r1) * (r2 - r1) / (r2 - r1 + l1 - l2) * H;
}
void work() {
  for (int i = 1; i <= (n); ++i)
    ans += (a[i].r - a[i].l + (a[i].r - a[i].l) * (F + H) / (F - H)) * H * 2;
  for (int i = 1; i <= (n); ++i)
    for (int j = 1; j <= (n); ++j) {
      ans -= cal(a[i].l, a[i].l * (F + H) / (F - H), a[j].l * (F + H) / (F - H),
                 a[j].l);
      ans += cal(a[i].l, a[i].l * (F + H) / (F - H), a[j].r * (F + H) / (F - H),
                 a[j].r);
      ans += cal(a[i].r, a[i].r * (F + H) / (F - H), a[j].l * (F + H) / (F - H),
                 a[j].l);
      ans -= cal(a[i].r, a[i].r * (F + H) / (F - H), a[j].r * (F + H) / (F - H),
                 a[j].r);
    }
  printf("%.6lf\n", ans);
}
int main() {
  init();
  work();
  return 0;
}
