// Arup Guha
// 5/20/2016
// Solution to 2014 NCNA Problem E: Aquarium Tank
// Note: This is a pretty terrible cheesy solution that exploits integer
//       input with bounds from 0 to 1000 for y.

import java.util.*;

public class tank {

	public static int n;
	public static double length;
	public static double water;

	public static void main(String[] args) {

		Scanner stdin = new Scanner(System.in);
		int loop = 1;

                // Process each case.
		while (stdin.hasNext()) {

			n = stdin.nextInt();
			length = stdin.nextDouble();
			water = stdin.nextDouble();

			// To square cm's - I will do the problem in square cms.
			water *= 1000;

                        // Read in points keeping track of max y.
			int[][] pts = new int[n][2];
			int maxy = 0;
			for (int i=0; i<n; i++) {
				pts[i][0] = stdin.nextInt();
				pts[i][1] = stdin.nextInt();
				maxy = Math.max(maxy, pts[i][1]);
			}

                        // Will store min, max x for each integer value of y.
			double[] min = new double[maxy+1];
			double[] max = new double[maxy+1];
			Arrays.fill(min, 2000);
			Arrays.fill(max, -2000);

                        // Go through each line segment.
			for (int i=0; i<n; i++) {
				int j = (i+1)%n;

                                // Special case - horizontal segment.
				if (pts[i][1] == pts[j][1]) {
					min[pts[i][1]] = Math.min(pts[i][0], pts[j][0]);
					max[pts[i][1]] = Math.max(pts[i][0], pts[j][0]);
				}

                                // Just use slope info to adjust all necessary mins and maxes.
				else {
					double delta = 1.0*(pts[j][0]-pts[i][0])/(pts[j][1]-pts[i][1]);
					double x = pts[j][1] < pts[i][1] ? pts[j][0] : pts[i][0];
					for (int y=Math.min(pts[i][1],pts[j][1]), z=0; y<=Math.max(pts[i][1],pts[j][1]); y++,z++) {
						double thisx = x+z*delta;
						min[y] = Math.min(min[y], thisx);
						max[y] = Math.max(max[y], thisx);
					}
				}
			}

			water /= length;

			double res = -1;

                        // Just add up the water, 1 cm of height at time =)
			for (int i=0; i<maxy; i++) {

				double len1 = max[i]-min[i];
				double len2 = max[i+1]-min[i+1];
				double area = (len1+len2)/2;

                                // We fill the whole "segment"
				if (area < water+1e-9) {
					water -=area;
					if (i == maxy-1) res = maxy;
				}

                                // We can use math (shape is a trapezoid) to determine height filled out of 1 cm.
				else {

                                        // Trapezoid math leads to solving a quadratic for the desired height.
					if (Math.abs(len2-len1) > 1e-9) {
						double a = (len2-len1);
						double b = 2*len1;
						double c = -2*water;
						double disc = Math.sqrt(b*b-4*a*c);
						double r1 = (-b+disc)/(2*a);
						double r2 = (-b-disc)/(2*a);
						double h = (r1 >= 0 && r1 <= 1) ? r1 : r2;
						res = i + h;
					}

                                        // Easier, just a rectangle!
					else
						res = i + water/area;
					break;
				}
			}

                        // Output and go to the next case.
			System.out.printf("Case %d: %.4f\n", loop, res);
			loop++;
		}
	}
}

