#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;

const int MAX_N = 1000;
const int MAX_W = 1000;
const int MAX_V = 10000;
int dp[MAX_N][MAX_W];
int w[MAX_N];
int v[MAX_N];

#define rep(i,a,b) for(int i=(a); i<(b); i++)

// // i未満の宝から価格がj以下になるように買った時の価格の最大値
// int solve(int i , int j){
//   int res;
//   if(dp[i][j] == -1){
//     if(i == 0){
//       res = 0;
//     } else if(j < w[i-1]){
//       res = solve(i-1,j);
//     } else {
//       res = max( solve(i-1,j) , solve(i-1,j-w[i-1])+v[i-1]);
//     }
//     dp[i][j] = res;
//   } else {
//     res = dp[i][j];
//   }
//   return res;
// }

int W;
int N;

int solve(){
  for(int i=0; i<N; i++){
    for(int j=0; j<=W; j++){
      if(j > w[i])
        dp[i+1][j] = max(dp[i][j] , dp[i][j-w[i]] + v[i]);
      else
        dp[i+1][j] = dp[i][j];
    }
  }
  return dp[N][W];
}

int findw(){
  int i = N - 1;
  int j = W;
  int ret = 0;
  while(i >= 0 && j >= 0){
    if(j > w[i] && dp[i][j] < dp[i][j-w[i]] + v[i]){
      ret += w[i];
      j-=w[i];
    }
    i--;
    // printf("%d %d\n",i,j);
  }
  return ret;
}

int main(){
  int c=1;
  while(cin >> W , W){
    cin >> N;
    rep(i,0,N){
      scanf("%d,%d", &v[i], &w[i]);
    }
    memset(dp,0,sizeof(dp));
    printf("Case %d:\n%d\n%d\n",c++,solve(),findw());
  }

  return 0;
}