import java.io.*; import java.util.*; public class acf_yuizumi { private static final double EPS = 1e-12; public static void main(String[] args) { Scanner cin = new Scanner(System.in); while(doCase(cin)) ; } private static boolean doCase(Scanner cin) { int n = cin.nextInt(); double r = cin.nextDouble(); if(n == 0 && r == 0) return false; double[] vx = new double[n]; double[] vy = new double[n]; for(int i = 0; i < n; i++) { vx[i] = (double)(cin.nextInt()); vy[i] = (double)(cin.nextInt()); } double[] x = new double[2*n]; System.arraycopy(vx, 0, x, 0, n); for(int i = 0; i < n; i++) { x[i+n] = vx[i] - r; } Arrays.sort(x); Function f = new Function(vx, vy); double S = 0.0; for(int i = 1; i < 2 * n; i++) { double x1 = x[i-1]; double x2 = 0.5 * (x[i-1] + x[i]); double x3 = x[i]; double y1 = f.value(x1) * f.value(x1 + r); double y2 = f.value(x2) * f.value(x2 + r); double y3 = f.value(x3) * f.value(x3 + r); // Simpson's rule gives the exact value since the integrand is // quadrandic S += (y1 + 4.0 * y2 + y3) * (x3 - x1); } System.out.println(S / 6.0); return true; } private static class Function { private double[] vx; private double[] vy; public Function(double[] vx, double[] vy) { if(vx.length != vy.length) { throw new IllegalArgumentException("length not match"); } this.vx = vx; this.vy = vy; } public double value(double x) { if(x > vx[0]) { for(int i = 1; i < vx.length; i++) { if(x <= vx[i]) { double a = (vy[i] - vy[i-1]) / (vx[i] - vx[i-1]); return a * (x - vx[i]) + vy[i]; } } } return 0.0; } } }