package com.gcj.parser;

public class MaxPoints {

	public static int normal(int value){
		int toReturn = 0;
		switch (value) {
		case 0 : toReturn = 0 ; break;
		case 1 : toReturn = 1 ; break;
		case 2 : toReturn = 1 ; break;
		case 3 : toReturn = 1 ; break;
		case 4 : toReturn = 2 ; break;
		case 5 : toReturn = 2 ; break;
		case 6 : toReturn = 2 ; break;
		case 7 : toReturn = 3 ; break;
		case 8 : toReturn = 3 ; break;
		case 9 : toReturn = 3 ; break;
		case 10 : toReturn = 4 ; break;
		case 11 : toReturn = 4 ; break;
		case 12 : toReturn = 4 ; break;
		case 13 : toReturn = 5 ; break;
		case 14 : toReturn = 5 ; break;
		case 15 : toReturn = 5 ; break;
		case 16 : toReturn = 6 ; break;
		case 17 : toReturn = 6 ; break;
		case 18 : toReturn = 6 ; break;
		case 19 : toReturn = 7 ; break;
		case 20 : toReturn = 7 ; break;
		case 21 : toReturn = 7 ; break;
		case 22 : toReturn = 8 ; break;
		case 23 : toReturn = 8 ; break;
		case 24 : toReturn = 8 ; break;
		case 25 : toReturn = 9 ; break;
		case 26 : toReturn = 9 ; break;
		case 27 : toReturn = 9 ; break;
		case 28 : toReturn = 10 ; break;
		case 29 : toReturn = 10 ; break;
		case 30 : toReturn = 10 ; break;

		}

		return toReturn;
	}

	public static int surprising(int value){
		int toReturn = 0;
		switch (value) {
		case 0 : toReturn = 0 ; break;
		case 1 : toReturn = 1 ; break;
		case 2 : toReturn = 2 ; break;
		case 3 : toReturn = 2 ; break;
		case 4 : toReturn = 2 ; break;
		case 5 : toReturn = 3 ; break;
		case 6 : toReturn = 3 ; break;
		case 7 : toReturn = 3 ; break;
		case 8 : toReturn = 4 ; break;
		case 9 : toReturn = 4 ; break;
		case 10 : toReturn = 4 ; break;
		case 11 : toReturn = 5 ; break;
		case 12 : toReturn = 5 ; break;
		case 13 : toReturn = 5 ; break;
		case 14 : toReturn = 6 ; break;
		case 15 : toReturn = 6 ; break;
		case 16 : toReturn = 6 ; break;
		case 17 : toReturn = 7 ; break;
		case 18 : toReturn = 7 ; break;
		case 19 : toReturn = 7 ; break;
		case 20 : toReturn = 8 ; break;
		case 21 : toReturn = 8 ; break;
		case 22 : toReturn = 8 ; break;
		case 23 : toReturn = 9 ; break;
		case 24 : toReturn = 9 ; break;
		case 25 : toReturn = 9 ; break;
		case 26 : toReturn = 10 ; break;
		case 27 : toReturn = 10 ; break;
		case 28 : toReturn = 10 ; break;
		case 29 : toReturn = 10 ; break;
		case 30 : toReturn = 10 ; break;

		}
		return toReturn;
	}

}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CodeJam2012;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

/**
 *
 * @author asha.j
 */
public class DancingGooglers {
    
    
    public static void main(String[] args) throws IOException {
        String filename= "B-large";
        Scanner scanner= new Scanner(new File("D:\\codejam\\"+filename+".in"));
        BufferedWriter writer= new BufferedWriter(new FileWriter("D:\\codejam\\"+filename+".out"));
        int numOfCases = scanner.nextInt();
        int noOfGooglers;
        int surpriseScoreCount;
        int p;
        int countAboveP=0;
        ArrayList<Integer> list= new ArrayList<Integer>();
        for(int i=1;i<=numOfCases;i++){
            list.clear();
            countAboveP=0;
            noOfGooglers= scanner.nextInt();
            surpriseScoreCount= scanner.nextInt();
            p= scanner.nextInt();
            for(int m=0;m<noOfGooglers;m++){
                    int data= scanner.nextInt();
                    list.add(data);
            }
            countAboveP= processCase(list, surpriseScoreCount, p);
            writer.write("Case #"+(i)+": "+countAboveP+"\n");
            writer.flush();
        }

    }
    
    private static int processCase(ArrayList<Integer> list,int surprising, int p){
        //System.out.println("processCase:"+list+"  sur:"+surprising+" p:"+p);
        int third;
        int reminder;
        int countAboveP=0;
        for(int score: list){
            third= score/3;
            reminder= score%3;
            if(score==0){
                if(p==0){
                    ++countAboveP;
                }
                continue;
            }
            if(third>=p){
                ++countAboveP;
            }else if(reminder==0){
                if(third+1 >=p && surprising>0){
                    --surprising;
                    ++countAboveP;
                }
            }else if(reminder==1){
                if(third+1 >=p){
                    ++countAboveP;
                }
            }else if(reminder==2){
                if(third+1 >=p){
                    ++countAboveP;
                }else if(third+2 >=p && surprising>0){
                    --surprising;
                    ++countAboveP;
                }
            }
        }
        return countAboveP;
    }
}
