/**
 * 
 */
package pandit.codejam;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Scanner;

/**
 * @author Manu Ram Pandit
 * 
 */
public class DancingWithGooglersUpload {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		FileInputStream fStream = new FileInputStream(
				"input.txt");

		Scanner scanner = new Scanner(new BufferedInputStream(fStream));
		Writer out = new OutputStreamWriter(new FileOutputStream("output.txt"));

		int T = scanner.nextInt();
		int N,S,P,ti;
		int counter = 0;
		for (int count = 1; count <= T; count++) {
			N=scanner.nextInt();
			S = scanner.nextInt();
			counter = 0;
			P = scanner.nextInt();
			for(int i=1;i<=N;i++){
				ti=scanner.nextInt();
				if(ti>=(3*P-2)){
					counter++;
					continue;
				}
				else if(S>0){
					if(P>=2 && ((ti==(3*P-3)) ||(ti==(3*P-4)))) {
					S--;
					counter++;
					continue;
					}
				}
				
			}
			// System.out.println("Case #" + count + ": " + counter);
			out.write("Case #" + count + ": " + counter + "\n");
		}
		fStream.close();
		out.close();

	}

}

package com.google.codejam.dancewithgooglers;

import java.io.*;

public class DanceWithGooglers {

	private static String filename = "small";
	
	public static void main(String[] args) throws Exception {
		RandomAccessFile input = new RandomAccessFile(filename + "_in.txt", "r");
		RandomAccessFile output = new RandomAccessFile(filename + "_out.txt", "rw");
		
		int cases = Integer.valueOf(input.readLine());
		for(int i = 0; i < cases; i++){
			String[] line = input.readLine().split(" ");
			
			int N = Integer.valueOf(line[0]);
			int S = Integer.valueOf(line[1]);
			int p = Integer.valueOf(line[2]);
			
			int[] t = new int[N];
			for(int j = 0; j < N; j++)t[j] = Integer.valueOf(line[j + 3]);
			
			int solved = solve(t, S, p);
			
			System.out.println("Case #" + (i + 1) + ": " + solved);
			output.writeBytes("Case #" + (i + 1) + ": " + solved + "\n");
		}
		
		output.close();
		input.close();
	}
	
	private static int solve(int[] scores, int S, int p){
		int found = 0;
		int surprising = 0;
		
		for(int i : scores){
			boolean[] result = permute(i, p);
			if(!result[0])continue;
			if(!result[1]){
				found++;
			}else{
				surprising++;
			}
		}
		
		if(S > surprising)return found + surprising;
		return found + S;
	}

	private static boolean[] permute(int value, int search){
		boolean found = false;
		boolean surprising = false;
		
		for(int a = 0; a <= 10; a++){
			for(int b = a; b <= a + 2; b++){
				if(b > 10)continue;
				for(int c = a; c <= a + 2; c++){
					if(c > 10)continue;
					if((a + b + c) != value)continue;
					
					if((a >= search) || (b >= search) || (c >= search)){
						found = true;
						
						if((Math.abs(a - b) == 2) || (Math.abs(a - c) == 2) || (Math.abs(b - c) == 2)){
							surprising = true;
						}else{
							return new boolean[]{ true, false };
						}
					}
				}
			}
		}
		return new boolean[]{ found, surprising };
	}
}
