#include #include using namespace std; typedef long long LL; const int N = 2100; struct node { int v, cnt; }dp[N]; int s[N], c[N], path[N][N], ans[N]; int main() { int t, ncase=1; scanf("%d", &t); while(t--) { int m, n; scanf("%d %d", &m, &n); for(int i=1;i<=n;i++) scanf("%d %d", &s[i], &c[i]); memset(path,0,sizeof(path)); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { for(int j=m;j>=c[i];j--) { if(dp[j-c[i]].v+s[i]>dp[j].v) { dp[j].v=dp[j-c[i]].v+s[i]; dp[j].cnt=dp[j-c[i]].cnt+i; path[i][j]=1; } else if(dp[j-c[i]].v+s[i]==dp[j].v&&dp[j-c[i]].cnt+i< dp[j].cnt) { dp[j].cnt=dp[j-c[i]].cnt+i; path[i][j]=1; } } } int maxt=0; int i=n,j=m,k=0; while(i>0) { if(path[i][j]) { ans[k++]=i; j-=c[i]; maxt+=c[i]; } i--; } printf("Case #%d:\n",ncase++); printf("%d %d\n",dp[m].v,maxt); for(i=k-1;i>=0;i--) printf("%d%c",ans[i],i==0?'\n':' '); } return 0; }