import java.awt.geom.*;
import java.util.ArrayList;
import java.awt.*;
import java.io.*;
import java.util.StringTokenizer;

class Polygons {
    public static void main(String[] args) throws IOException {
        new Polygons().run();
    }

    static int intval(String s) { return Integer.parseInt(s); }

    public void run() throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int which = 0;
        ArrayList<Integer> xs = new ArrayList<Integer>();
        ArrayList<Integer> ys = new ArrayList<Integer>();

        int casenumber = 0;
        while(true) {
            ++casenumber;
            StringTokenizer tk = new StringTokenizer(in.readLine().trim());
            int V = intval(tk.nextToken());
            int T = intval(tk.nextToken());
            if(V == 0 && T == 0) break;

            // Read in |np| points, add to a Polygon
            for(int i = 0; i < V; ++i) {
                tk = new StringTokenizer(in.readLine().trim());
                int px = intval(tk.nextToken());
                int py = intval(tk.nextToken());
                int pz = intval(tk.nextToken());
                xs.add(px);
                ys.add(py);
            }

            Area roof = new Area();

            for(int i = 0; i < T; ++i) {
                tk = new StringTokenizer(in.readLine().trim());
                int p1 = intval(tk.nextToken()) - 1;
                int p2 = intval(tk.nextToken()) - 1;
                int p3 = intval(tk.nextToken()) - 1;
                Polygon p = new Polygon();
                p.addPoint(xs.get(p1), ys.get(p1));
                p.addPoint(xs.get(p2), ys.get(p2));
                p.addPoint(xs.get(p3), ys.get(p3));
                roof.add(new Area(p));
            }
            

             System.out.printf("Case %d: %.2f\n", casenumber, areaOf(roof));
        }
        System.out.printf("\n");
    }

    static double areaOf(Shape s) {
        PathIterator i = s.getPathIterator(null);
        double[] coords = new double[6];
        int r;
        double area = 0.;
        double mx, my, lx, ly, x, y;
        mx= my= lx= ly= 0.; // prevent javac complaints over un-init-ed vars
        while(!i.isDone()) {
            r = i.currentSegment(coords);
            x = coords[0]; y = coords[1];

                   if(r == PathIterator.SEG_LINETO) {
                area += (lx*y - x*ly);
            } else if(r == PathIterator.SEG_CLOSE) {
                area += (lx*my - mx*ly);
            } else if(r == PathIterator.SEG_MOVETO) {
                mx = x;
                my = y;
            }

            lx = x; ly = y;
            i.next();
        }
        return Math.abs(area/2);
    }
}
