#include #include #include #include #include #include using namespace std; const int maxn = 1e4+10; struct node{ int vo,va,id; }v[maxn]; int dp[maxn],pre[100][maxn],res[maxn]; int t,n,m; int main(){ scanf("%d",&t); for(int Case = 1;Case <= t;Case++){ scanf("%d%d",&n,&m); memset(pre,0,sizeof(pre)); memset(dp,0,sizeof(dp)); memset(v,0,sizeof(v)); memset(res,0,sizeof(res)); for(int i = 1;i <= m;i++){ scanf("%d%d",&v[i].va,&v[i].vo); v[i].id = i; } for(int i = 1;i <= m;i++){ for(int j = n;j >= v[i].vo;j--){ if(dp[j-v[i].vo]+v[i].va > dp[j]){ dp[j] = dp[j-v[i].vo]+v[i].va; pre[i][j] = 1; } } } int sum1 = 0,sum2 = 0,k = 0; for(int i = m,j = n;i > 0;i--){ if(pre[i][j] == 1){ sum1 += v[i].va; sum2 += v[i].vo; res[k++] = v[i].id; j -= v[i].vo; } } printf("Case #%d:\n%d %d\n",Case,sum1,sum2); sort(res,res+k); for(int i = 0;i < k;i++){ if(i == k-1) printf("%d\n",res[i]); else printf("%d ",res[i]); } } return 0; }