//Buy the souvenirs
//当发现由熟悉的动态规划题目变形得来的题目时,在原来的状态中加一维以满足新的限制是一种比较通用的方法。
//data:10 4
//1 2 3 4 5 6 7 8 9 0
#include<stdio.h>
#include<string.h>

int max(int a,int b);

int main(){
	int t,n,m,p[35];
	int i,j,dp[505][2];
	while(scanf("%d",&t)!=EOF){
		while(t--){
			
			scanf("%d%d",&n,&m);
			for(i=0;i<n;i++){
				scanf("%d",&p[i]);
			}
        	memset(dp,0,sizeof(dp));
			for(i=0;i<m;i++){
				dp[i][1]=1;
			}
			
			for(i=0;i<n;i++){
				for(j=m;j>=p[i];j--){
					
						if(dp[j][0]==dp[j-p[i]][0]+1) dp[j][1]=dp[j-p[i]][1]+dp[j][1];
				    	else if(dp[j][0]<dp[j-p[i]][0]+1) dp[j][1]=dp[j-p[i]][1];
						
						dp[j][0]=max(dp[j][0],dp[j-p[i]][0]+1);//状态转移方程
						
				/* if(dp[j][0]==dp[j-p[i]][0]+1){  
                    dp[j][1]=dp[j-p[i]][1]+dp[j][1];  
                }  
                else if(dp[j][0]<dp[j-p[i]][0]+1){  
                    dp[j][0]=dp[j-p[i]][0]+1;  
                    dp[j][1]=dp[j-p[i]][1];  
                } */
					     
				}
			}
		
			if(!dp[m][0]) printf("Sorry, you can't buy anything.\n");
			else printf("You have %d selection(s) to buy with %d kind(s) of souvenirs.\n",dp[m][1],dp[m][0]);
		}
	}
	return 0;
}
int max(int a,int b){
	return (a>b?a:b);
}