import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class Dancing_improved {
	
	static int f_Superan_limites(String params){
		  int superan_limite=0;
		  String[] parametros=params.split(" ");
		  
		  int n_participantes= Integer.parseInt(parametros[0]);
		  int n_sorprendidos= Integer.parseInt(parametros[1]);
		  int nota_limite= Integer.parseInt(parametros[2]);
		  
		  int suma_notas, resto, nota_juego;
		  for(int i=3;i<parametros.length;i++){ // Recorro las sumas de los participantes
			  
			  suma_notas=Integer.parseInt(parametros[i]);
			  resto=suma_notas%3;
			  
			  if(resto==0){ // el resto es el número triplicado!
				  nota_juego=suma_notas/3;
				  if(nota_juego>=nota_limite){
					  superan_limite++;
				  }else if(nota_juego-1>=0 && n_sorprendidos>0 && ((nota_juego+1)>=nota_limite || (nota_juego+2)>=nota_limite)){ // no supera el límite pero podría hacerlo si quedan sorprendidos
					  n_sorprendidos--;
					  superan_limite++;
				  }
			  }else if((suma_notas+1)%3==0){ // Tendré que jugar con el valor en +-1
				  nota_juego=(suma_notas+1)/3;
				  if(nota_juego-1>=0 && nota_juego>=nota_limite){
					  superan_limite++;
				  }else if(nota_juego-1>=0 && n_sorprendidos>0 && (nota_juego+1)>=nota_limite){
					  n_sorprendidos--;
					  superan_limite++;
				  }
			  }else if((suma_notas+2)%3==0){ // Tendré que jugar con el valor en +-2
				  nota_juego=(suma_notas+2)/3;
				  if(nota_juego-1>=0 && nota_juego>=nota_limite){
					  superan_limite++;
				  }		  
			  }			  
		  }
		  return superan_limite;
	}
	
	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader(args[0]);
		BufferedReader bf = new BufferedReader(fr);
		int ntest=0;
		
		FileWriter fstream = new FileWriter("out.txt");
		BufferedWriter out = new BufferedWriter(fstream);
		
		String lines = bf.readLine();
		String liner, linew;
		int lines_r=0;
		String[] numbers;
		int total;
		
		while((liner = bf.readLine())!=null && lines_r<=Integer.parseInt(lines)) {
			ntest++;
			numbers=liner.split(" ");
			total=f_Superan_limites(liner);
			linew="Case #"+ntest+": "+total+"\n";
			out.write(linew);
			lines_r++;
		}
		out.close();
		fr.close();
	}
}

package com.piscessera.google.codejam.q02;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class Q2 {

	private int t; // 0-100

	private int[] answer;

	public Q2() {
	}

	public Q2(int testcase) {
		this.t = testcase;
		this.answer = new int[this.t];
	}

	public void startProcess(String filename) {
		try {
			File inFile = new File("C://" + filename + ".in");

			if (inFile.exists()) {
				int lineNumber = 0;
				int input = 0;
				String[] question = null;
				InputStream in = new FileInputStream(inFile);
				BufferedReader br = new BufferedReader(new InputStreamReader(
						in, "utf-8"), 8);

				StringBuffer sb = new StringBuffer();

				String line = null;
				while ((line = br.readLine()) != null) {
					if (lineNumber == 0) {
						input = Integer.parseInt(line);
						question = new String[input];
					} else if (lineNumber > input) {
						continue;
					} else {
						question[lineNumber - 1] = line;
					}
					lineNumber++;
				}

				this.t = input;
				this.answer = new int[this.t];
				int count = 0;
				for (String q : question) {
					String[] vars = q.split(" ");

					int[] scores = new int[vars.length - 3];
					for (int i = 0; i < scores.length; i++) {
						scores[i] = Integer.parseInt(vars[i + 3]);
					}
					this.answer[count] = calculate(Integer.parseInt(vars[0]),
							Integer.parseInt(vars[1]),
							Integer.parseInt(vars[2]), scores);
					count++;
				}

				// set output
				StringBuffer outSb = new StringBuffer();
				int index = 0;
				for (int answer : this.answer) {
					outSb.append("Case #" + (index + 1) + ": " + answer + "\n");
					index++;
				}

				Writer out = new OutputStreamWriter(new FileOutputStream("C://"
						+ filename + ".out"), "utf-8");
				out.write(outSb.toString());
				out.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public int calculate(int googlers, int surprising, int minScore,
			int[] scores) {
		int result = 0;

		int index = 0;
		for (int score : scores) {
			int base = score / 3;
			// int[] realScore = { base, base, base };

			// find score
			switch (score % 3) {
			case 0:
				// realScore[0] = base - 1;
				// realScore[1] = base;
				// realScore[2] = base + 1;

				if (base >= minScore) {
					result++;
				} else {
					if (surprising > 0 && base > 0 && (base + 1) >= minScore) {
						surprising--;
						result++;
					}
				}
				break;
			case 1:
				// realScore[0] = base - 1;
				// realScore[1] = base + 1;
				// realScore[2] = base + 1;

				if (base >= minScore || base + 1 >= minScore) {
					result++;
				} else {
					if (surprising > 0 && (base + 1) >= minScore) {
						surprising--;
						result++;
					}
				}

				break;
			case 2:
				// realScore[0] = base;
				// realScore[1] = base;
				// realScore[2] = base + 2;

				if (base >= minScore || base + 1 >= minScore) {
					result++;
				} else {
					if (surprising > 0 && (base + 2) >= minScore) {
						surprising--;
						result++;
					}
				}
				break;
			}
			index++;
		}
		System.out.println("Result: " + result);

		return result;
	}

	public static void main(String[] args) {
		Q2 obj = new Q2();
		obj.startProcess("codejam/B-small-attempt4");
	}

}
