#include <cstdio>
#include <cstring>
const int MAXN=60;
int N,T,t[MAXN];
struct Node{
int time;
int num;
bool operator > (const Node& other) const{
return num>other.num||(num==other.num&&time>other.time);
}
};
Node dp[MAXN][180*MAXN];
int main() {
int _case;
int __case=1;
scanf("%d",&_case);
while (_case--) {
scanf("%d %d",&N,&T);
int sum=0;
for (int i=1; i<=N; i++) {scanf("%d",&t[i]);sum+=t[i];}
T=T-1<sum?T-1:sum;
memset(dp, 0, sizeof(dp));
for (int i=1; i<=N; i++)
for (int j=0; j<=T; j++) {
//i不放
Node tmp1;
tmp1.num=dp[i-1][j].num;
tmp1.time=dp[i-1][j].time;
dp[i][j]=tmp1;
if (j>=t[i]) {
Node tmp2;
tmp2.num=dp[i-1][j-t[i]].num+1;
tmp2.time=dp[i-1][j-t[i]].time+t[i];
dp[i][j]=dp[i][j]>tmp2?dp[i][j]:tmp2;
}
}
printf("Case %d: %d %d\n",__case++,dp[N][T].num+1,dp[N][T].time+11*60+18);
}
return 0;
}