#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-6;
double Solve(double F, double H, double L0, double R0, double L1, double R1,
             double Y) {
  double Left = max(L0 * (F - Y) / (F + H), L1 * (Y + F) / (F + H));
  double Right = min(R0 * (F - Y) / (F + H), R1 * (Y + F) / (F + H));
  return max(Right - Left, 0.0);
}
double Cross(double F, double H, double L0, double R0, double L1, double R1) {
  int N = 2;
  double P[6], Q[6];
  P[0] = H;
  P[1] = -H;
  if (fabs(L0 + L1) > eps) {
    double T = (L0 - L1) / (L0 + L1) * F;
    if (fabs(T) < H) P[N++] = T;
  }
  if (fabs(L0 + R1) > eps) {
    double T = (L0 - R1) / (L0 + R1) * F;
    if (fabs(T) < H) P[N++] = T;
  }
  if (fabs(R0 + L1) > eps) {
    double T = (R0 - L1) / (R0 + L1) * F;
    if (fabs(T) < H) P[N++] = T;
  }
  if (fabs(R0 + R1) > eps) {
    double T = (R0 - R1) / (R0 + R1) * F;
    if (fabs(T) < H) P[N++] = T;
  }
  sort(P, P + N);
  for (int i = 0; i < N; i++) Q[i] = Solve(F, H, L0, R0, L1, R1, P[i]);
  double Ans = 0;
  for (int i = 1; i < N; i++) Ans += (Q[i - 1] + Q[i]) / 2 * (P[i] - P[i - 1]);
  return Ans;
}
int main() {
  int N;
  double H, F;
  scanf("%d%lf%lf", &N, &H, &F);
  double Len = 0;
  static double L[500], R[500];
  for (int i = 0; i < N; i++) {
    scanf("%lf%lf", &L[i], &R[i]);
    L[i] *= (F + H) / (F - H);
    R[i] *= (F + H) / (F - H);
    Len += R[i] - L[i];
  }
  double Ans = 4 * Len * F * H / (F + H);
  for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++) Ans -= Cross(F, H, L[i], R[i], L[j], R[j]);
  printf("%0.10lf\n", Ans);
  return 0;
}
