Problem:
Score : 200 points

Problem Statement

You have written N problems to hold programming contests.
The i-th problem will have a score of P_i points if used in a contest.

With these problems, you would like to hold as many contests as possible under the following condition:

A contest has three problems. The first problem has a score not greater than A points, the second has a score between A + 1 and B points (inclusive), and the third has a score not less than B + 1 points.

The same problem should not be used in multiple contests.
At most how many contests can be held?

Constraints

3 \leq N \leq 100

1 \leq P_i \leq 20 (1 \leq i \leq N)

1 \leq A < B < 20

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A B
P_1 P_2 ... P_N

Output

Print the answer.

Sample Input 1

7
5 15
1 10 16 2 7 20 12

Sample Output 1

2

Two contests can be held by putting the first, second, third problems and the fourth, fifth, sixth problems together.

Sample Input 2

8
3 8
5 5 5 10 10 10 15 20

Sample Output 2

0

No contest can be held, because there is no problem with a score of A = 3 or less.

Sample Input 3

3
5 6
5 6 10

Sample Output 3

1

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

/*
 * main.c
 *
 *  Created on: 2019/01/12
 *      Author: family
 */


#include <stdio.h>
#include <stdlib.h>

int lessthan(const void *a, const void *b)
{
    return *(int*)a - *(int*)b;
}

int main()
{
	int n_problem = 0;
	int n_problem_max = 0;
	int a_low_point = 0;
	int b_high_point = 0;
	int p_point[101] = {0};
	int i = 0;
	int j = 0;
	int count = 0;

	scanf("%d", &n_problem);
	n_problem_max = n_problem;
	scanf("%d %d", &a_low_point, &b_high_point);
	for(i = 0; i < n_problem; i++) {
		scanf("%d", &p_point[i]);
	}
	qsort((void *)&p_point[0], n_problem, sizeof(int), lessthan);

	i = 0;
    j = 0;
    while(1) {
    	switch(count) {
    	case 0:
    	default:
        	if (p_point[j] <= a_low_point) {
        		p_point[j] = 0;
        		count = 1;
//        		printf("a%d\n",count);
        	} else {
//        		printf("no10 %d\n", p_point[j]);
        	}
        	break;
    	case 1:
        	if ((p_point[j] > a_low_point) && (p_point[j] <= b_high_point)) {
        		p_point[j] = 0;
        		count = 2;
//        		printf("a%d\n",count);
        	} else {
//        		printf("no11 %d\n", p_point[j]);
        	}
        	break;
    	case 2:
        	if (p_point[j] > b_high_point) {
        		p_point[j] = 0;
        		count = 0;
        		i++;
        		n_problem -= 3;
            	j = 0;
//        		printf("a%d\n",count);
            	continue;
			} else {
//        		printf("no12 %d\n", p_point[j]);
			}
        	break;
    	}
    	if(n_problem < 3) {
//    		printf("exit1\n");
    		break;
    	}
    	j++;
    	if(j > n_problem_max) {
//    		printf("exit2\n");
    		break;
    	}
//    	printf("loop%d\n",j);
    }
    printf("%d",i);

    return 0;
}