package code12.qualification;

import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;

public class B {
	public static String solve(int N, int S, int p, int[] t) {
		
		// 3a 		-> (a, a, a), *(a - 1, a, a + 1)
		// 3a + 1	-> (a, a, a + 1), *(a - 1, a + 1, a + 1)
		// 3a + 2	-> (a, a + 1, a + 1), *(a, a, a + 2)
		
		int numPNoS = 0;
		int numPWithS = 0;
		
		for (int i = 0; i < N; i++) {
			int a = (int)Math.floor(t[i] / 3);
			int r = t[i] % 3;
			
			switch (r) {
			case 0:
				if (a >= p) {
					numPNoS++;
				} else if (a + 1 >= p && a - 1 >= 0) {
					numPWithS++;
				}
				break;
			case 1:
				if (a >= p || a + 1 >= p) {
					numPNoS++;
				}
				break;
			case 2:
				if (a >= p || a + 1 >= p) {
					numPNoS++;
				} else if (a + 2 >= p) {
					numPWithS++;
				}
				break;
			}
		}
		
		return "" + (numPNoS + Math.min(S, numPWithS));
	}

	public static void main(String[] args) throws Exception {
		// file name
		//String fileName = "Sample";
		//String fileName = "B-small";
		String fileName = "B-large";
		
		// file variable
		File inputFile = new File(fileName + ".in");
		File outputFile = new File(fileName + ".out");
		Scanner scanner = new Scanner(inputFile);
		FileWriter writer = new FileWriter(outputFile);

		// problem variable
		int totalCase;
		int N, S, p;
		int[] t;

		// get total case
		totalCase = scanner.nextInt();

		for (int caseIndex = 1; caseIndex <= totalCase; caseIndex++) {
			// get input
			N = scanner.nextInt();
			S = scanner.nextInt();
			p = scanner.nextInt();
			t = new int[N];
			
			for (int i = 0; i < N; i++) {
				t[i] = scanner.nextInt();
			}
			
			String output = "Case #" + caseIndex + ": " + solve(N, S, p, t);
			System.out.println(output);
			writer.write(output + "\n");
		}
		scanner.close();
		writer.close();
	}
}

package problemB;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.Scanner;

public class DancingWithTheGooglers {
	
	public static void main(String[] args) throws Exception {
		
		Writer write = new FileWriter(new File("out.txt"));
		Writer writer = new BufferedWriter(write);
		
		Scanner scan = new Scanner(new File("B-large.in.txt"));
		
		int t = scan.nextInt();
		
		for(int i = 1; i<=t; i++) {
			int n = scan.nextInt();
			int s = scan.nextInt();
			int p = scan.nextInt();
			Score[] score = new Score[n];
			for(int j = 0; j<score.length; j++) {
				score[j] = new Score(scan.nextInt());
			}
			
			
			int count = 0;
			for(int j = 0; j<n; j++) {
				if(score[j].bestScore(p)) {
					count++;
					score[j] = null;
				}
			}
			
			int surprising = 0;
			for(int j = 0; j<n && surprising<s; j++) {
				if(score[j]!=null) {
					if(score[j].bestScoreOther(p)) {
						count++; surprising++;
					}
				}
			}
			writer.write("Case #"+i+": "+count+"\n");
		}
		
		writer.close();
		write.close();
		
	}
	
	
	private static class Score {
		int[] not;
		int[] surprising;
		
		public Score(int num) {
			not = new int[3];
			buildScores(num);
		}
		
		public boolean bestScore(int score) {
			for(int i : not) {
				if(i>=score) return true;
			}
			return false;
		}
		
		public boolean bestScoreOther(int score) {
			if(surprising==null) return false;
			for(int i : surprising) {
				if(i>=score) return true;
			}
			return false;
		}
		
		private void buildScores(int num) {
			int i = 0;
			while(i<num) {
				if(i<num) { not[0]++; i++; }
				
				if(i<num) {	not[1]++; i++; }
				
				if(i<num) { not[2]++; i++; }
			}
			
			buildSurprising();
		}

		private void buildSurprising() {
			int increment = -1;
			int decrement = -1;
			if(not[0]==not[1]) {
				if(not[0]!=10) increment = 0;
				if(not[1]!=0) decrement = 1;
			} else if (not[0]==not[2]) {
				if(not[0]!=10)increment = 0;
				if(not[0]!=0)decrement = 2;
			} else if (not[1]==not[2]) {
				if(not[0]!=10)increment = 1;
				if(not[0]!=0)decrement = 2;
			}
			
			if(increment!=-1 && decrement!=-1) {
				surprising = new int[]{not[0], not[1], not[2]};
				surprising[increment]++;
				surprising[decrement]--;
			}
		}
		
		
	}

}
