#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> using namespace std; struct node{ int t1; int t2; }; vector<node>Q[100005]; __int64 sum[100005],s; int cmp(node a,node b) { if(a.t1<b.t1) return 0; else return 1; } int main() { int T,n,m,q,i,j,k,l,bianhao,num,max; int cao; struct node temp; scanf("%d",&T); for(l=1;l<=T;l++) { max=-1; scanf("%d%d%d",&n,&m,&q); for(i=1;i<=n;i++) Q[i].clear(); while(m--) { scanf("%d%d%d",&bianhao,&temp.t1,&temp.t2); Q[bianhao].push_back(temp); cao=Q[bianhao].size(); if(cao>max) max=cao; } for(i=1;i<=n;i++) sort(Q[i].begin(),Q[i].end(),cmp); printf("Case #%d: ",l); num=0;sum[0]=0; for(i=1;i<=max;i++) { s=0; for(j=1;j<=n;j++) if(Q[j].size()>=i) s+=Q[j][i-1].t2; sum[i]=sum[i-1]+s; } while(q--) { scanf("%d",&k); if(k<=max) printf("%I64d ",sum[k]); else printf("%I64d ",sum[max]); } } return 0; }