#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <utility>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
 
using namespace std;
 
#define pb(n)	push_back(n)
#define mp(n,m) make_pair(n,m)
#define fi 	first
#define se 	second
#define all(r) r.begin(),r.end()

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

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
 
const int IMAX=((1<<30)-1)*2+1;
const double EPS=1e-9;
//int mod=1000000007;

vector<pii> v(1010,pii(0,0));
vector<vi> dp(1010,vi(1010,-1));
int N,W;

int ap=0,aw=0;

void init(){
	for(int i=0; i<N+1; i++){
		for(int j=0; j<W+1; j++){
			dp[i][j]=-1;
		}
		v[i]=mp(0,0);
	}
	ap=0;
	aw=0;
}

int calc(int n,int w){
	if(dp[n][w]!=-1)return dp[n][w];
	int ret;
	int t=w;
	if(n==N)ret=0;
	else if(w+v[n].second>W)ret=calc(n+1,w);
	//else ret=max(calc(n+1,w),calc(n+1,w+v[n].second)+v[n].first);
	else{
		int a=calc(n+1,w),b=calc(n+1,w+v[n].second)+v[n].first;
		if(b>a)t+=v[n].second;
		ret=max(a,b);
		//if(a==0&&b==10)cout<<n<<" "<<ret<<" "<<t<<endl;
	}
	// if(ret>=ap){
	// 	ap=ret;
	// 	aw=w;
	// 	cout<<ap<<" "<<aw<<endl;
	// }
	if(ret>=ap){
		ap=ret;
		aw=t;
	}
	//cout<<ret<<" "<<n<<" "<<t<<endl;
	return dp[n][w]=ret;
}



int main(){
	int k=0;
	char c;
	while(++k){
		cin>>W;
		//cout<<"    W        "<<W<<endl;
		if(W==0)break;
		cin>>N;
		init();
		for(int i=0; i<N; i++){
			cin>>v[i].first>>c>>v[i].second;
		}
		calc(0,0);
		cout<<"Case "<<k<<":"<<endl;
		cout<<ap<<endl;
		cout<<aw<<endl;
		//scout<<v[4].first<<endl;;
		// for(int i=0; i<N+1; i++){
		// 	for(int j=0; j<W+1; j++){
		// 		if(dp[i][j]==220)cout<<i<<" "<<j<<endl;
		// 	}
		// }
	}
}