import java.util.*;
public class Test {
  public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    int T = in.nextInt();

    for(int i = 1; i<=T; i++) {
      int n = in.nextInt();
      int s = in.nextInt();
      int p = in.nextInt();
      int result = 0;
      for(int j = 0; j<n; j++){
        int x = canAddUp(in.nextInt(), p);
        if(x == 0) {
          result++;
        } else if (x==1 && s > 0) {
          result++;
          s--;
        }
      }
      System.out.println("Case #"+i+": "+result);
    }
  }

  public static int canAddUp(int sum, int limit) {
    boolean flag = false;
    for(int i = 0; i<=sum; i++) {
      for(int j = 0; i+j <= sum; j++) {
        int k = sum-(i+j);
        int a = Math.abs(i-j);
        int b = Math.abs(i-k);
        int c = Math.abs(j-k);
        if(a > 2 || b > 2 || c> 2){
          continue;
        }

        if (i>=limit || j>=limit || k>=limit) {
          if(a < 2 && b < 2 && c < 2) {
            return 0;
          }else{
            flag = true;
          }
        }
      }
    }
    return (flag) ? 1 : 2;
  }
}

package com.nolmecolindor.gcj2012.round0;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class Problem_B_0 {
	
	private int solve(final Scanner input) {
		final int N = input.nextInt();
		final int S = input.nextInt();
		final int P = input.nextInt();
		final int[] points = new int[31];
		for (int i = 0; i < N; i++) points[input.nextInt()]++;
//		System.out.println("Point distribution: ");
//		for (int i = 0; i <= 30; i++) System.out.println(points[i] + " dancers got " + i + " points.");

		int remainingSurprises = S;
		
		int result = 0;
		for (int i = 30; i >= 0; i--) {
			if (points[i] == 0) continue;
			final int min;
			final int max;
			switch (i % 3) {
			case 0:
				min = i / 3;
				max = min;
				if (max >= P) { // We reach the limit by default
					result += points[i];
				} else if ((max + 1 == P) && (min > 0) && (max < 10)) { // We can reach the limit with surprises
					final int useSurprises = Math.min(points[i], remainingSurprises);
					remainingSurprises -= useSurprises;
					result += useSurprises;
				} else { // We can not reach the limit anyway
					// We are not interested
				}
				break;
			case 1:
				max = (i - 1) / 3 + 1;
				if (max >= P) result += points[i];
				break;
			case 2:
				min = (i - 2) / 3;
				max = min + 1;
				if (max >= P) { // We reach the limit by default
					result += points[i];
				} else if ((max + 1 == P) && (max < 10)) { // We can reach the limit with surprises
					final int useSurprises = Math.min(points[i], remainingSurprises);
					remainingSurprises -= useSurprises;
					result += useSurprises;
				} else { // We can not reach the limit anyway
					// We are not interested
				}
				break;
			}
			
		}
		return result;
	}
	
	
	private void solveAll(final Scanner input) throws NumberFormatException, IOException {
		final int cases = input.nextInt();
		input.nextLine();
		for (int caseNum = 1; caseNum <= cases; caseNum++) {
			System.out.println("Case #" + caseNum + ": " + solve(input));
		}
	}
	
	public static void main(final String[] args) {
		try {
			final Scanner input = new Scanner(((args.length == 2) && args[0].equals("--input")) ? new FileInputStream(args[1]) : System.in);
			new Problem_B_0().solveAll(input);
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
