// 重さの総和W以下, 同率なら軽い方を出力

#include <iostream>
#include <cstring>

using namespace std;

const int N_MAX=1000;
const int W_MAX=10000;
int value[N_MAX], weight[N_MAX];

int memoW[W_MAX];
int NUM;
int VTOTAL=-1, WTOTAL=9999999;
int W;

int max(int a, int b);
int maximumValue(int v, int w, int n); // v:現在の価値, w:現重量 n番目の要素に対して

int main() {
  cin>>W;
  cin>>NUM;
  for(int i=0; i<NUM; i++) {
    cin>>value[i]; // 価値
    cin.ignore(); // 1文字読み飛ばし(",")
    cin>>weight[i]; // 重さ
  }
  memset(memoW, -1, sizeof(memoW));
  cout<<maximumValue(0, 0, 0)<<endl;
  cout<<WTOTAL<<endl;
}

int max(int a, int b) {
  if(a>b) {
    return a;
  }
  else {
    return b;
  }
}

int maximumValue(int v, int w, int n) {
  if(n==NUM) { // 最深部
    if(v>VTOTAL) {
      VTOTAL=v;
      WTOTAL=w;
    }
    if(v==VTOTAL && w<WTOTAL) {
      WTOTAL=w;
    }
    return v;
  }
  else if(w+weight[n]<=W) {
    return max(maximumValue(v, w, n+1), maximumValue(v+value[n], w+weight[n], n+1));
  }
  else {
    return maximumValue(v, w, n+1);
  }
}