/*思路就是利用优先队列,对于任意一个数可以选择,也可以跳过它,直接选择下一个*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
struct Node
{
int num;
int nextnum;
int id;
friend bool operator<(Node x,Node y){
return x.nextnum>y.nextnum;
}
}stu1,stu2;
int sum;
int n,m;
int a[10010];
void Findmin()
{
priority_queue<Node>q;
stu1.num=0;
stu1.nextnum=a[0];
stu1.id=0;
q.push(stu1);
while(!q.empty())
{
stu1=q.top();
q.pop();
if(stu1.id>=n)continue;
stu2.num=stu1.num;//跳过它
stu2.nextnum=stu1.num+a[stu1.id+1];
stu2.id=stu1.id+1;
q.push(stu2);
stu2.num=stu1.nextnum; //选择它
stu2.nextnum=stu1.nextnum+a[stu1.id+1];
stu2.id=stu1.id+1;
q.push(stu2);
sum++;
if(sum==m)
{
cout<<stu1.nextnum<<endl;
break;
}
}
}
int main()
{
int T;
int i,j;
scanf("%d",&T);
for(i=1;i<=T;i++)
{
sum=0;
cin>>n>>m;
for(j=0;j<n;j++)
cin>>a[j];
sort(a,a+n);
printf("Case #%d: ",i);
Findmin();
}
return 0;
}