#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <sstream>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <iterator>
#include <stack>
#include <list>
using namespace std;
#define INF 100000000
typedef long long int lli;
typedef pair<int,int> P;

int value[1001];
int cost[1001];
int dp[1001][1001];

void cut(string s,int& a,int& b){
	for(int i=0; i<s.size(); ++i){
		if(s[i]==','){
			string tmp1=s.substr(0,i);
			string tmp2=s.substr(i+1);
			a=atoi(tmp1.c_str());
			b=atoi(tmp2.c_str());
			break;
		}
	}
}

int main(){
	int W,N,cnt=1;
	while(cin>>W&&W){
		cin >> N;
		for(int i=0; i<N; ++i){
			for(int j=0; j<=1000; ++j){
				dp[i][j]=-1;
			}
		}
		for(int i=0; i<N; ++i){
			string tmp;
			cin >> tmp;
			cut(tmp,value[i],cost[i]);
			//cout << value[i] << " " << cost[i] << "\n";
		}
		dp[0][cost[0]]=value[0];
		dp[0][0]=0;
		for(int i=1; i<N; ++i){
			for(int j=0; j<=W; ++j){
				if(j-cost[i]>=0){
					dp[i][j]=max(dp[i-1][j],dp[i-1][j-cost[i]]+value[i]);
				} else {
					dp[i][j]=dp[i-1][j];
				}
			}
		}
		int ans_v=-1;
		int ans_c;
		for(int i=0; i<=W; ++i){
			if(dp[N-1][i]>ans_v){
				ans_v=dp[N-1][i];
				ans_c=i;
			}
		}
		cout << "Case " << cnt << ":\n" << ans_v << "\n" << ans_c << "\n";
		++cnt;
	}
	return 0;
}