#include <bits/stdc++.h>

using namespace std;

#define N (int)(1e3+5)

int dp[N];
int dp2[N];
int value[N],volume[N];

int my_max(int a,int b){
    return (a>b)?a:b;
}

int main(){
    int n,V;
    scanf("%d %d",&n,&V);
    for(int i=0;i<n;i++){
        scanf("%d %d",&volume[i],&value[i]);
    }
    for(int i=1;i<=V;i++){
        dp2[i]=INT_MIN;
    }

    for(int i=0;i<n;i++)//遍历每种物品
    {
        //正序可以多次使用物品,累加物品
        for(int j=volume[i];j<=V;j++){
            dp[j]=my_max(dp[j],dp[j-volume[i]]+value[i]);
            dp2[j]=my_max(dp2[j],dp2[j-volume[i]]+value[i]);
        }
    }
    printf("%d\n",dp[V]);
    if(dp2[V]>0) printf("%d\n",dp2[V]);
    else printf("%d\n",0);
    return 0;
}