#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define INF 0x3f3f3f3f #define TEST cout<<"stop here"<> T; while(T--){ int b,n; cin>>b>>n; for(int i=1;i<=n;i++) cin>>a[i].score>>a[i].cost; memset(dp,0,sizeof(dp)); memset(vis,false,sizeof(vis)); memset(ans,0,sizeof(ans)); for(int i=1;i<=n;i++){ for(int j=b;j>=a[i].cost;j--){ if(dp[j] < dp[j-a[i].cost] + a[i].score){ dp[j] = dp[j-a[i].cost] + a[i].score; vis[i][j] = true; } else vis[i][j] = false; } } int p=b,cnt = 0; for(int i=n;i>=1;i--){ if(vis[i][p]){ ans[i]=true; p -= a[i].cost; cnt++; } } int ANS = 0; for(int i=1;i<=n;i++){ if(ans[i]) ANS += a[i].cost; } printf("Case #%d:\n",kase++); printf("%d %d\n",dp[b],ANS); for (int i = 1; i <= n; i++) if (ans[i]) printf("%d%c", i, (--cnt == 0) ? '\n' : ' '); } return 0; }