#include <bits/stdc++.h>

using namespace std;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, v;
    cin >> n >> v;
    vector<int> dp1(v + 1, 0); //表示最大容量
    vector<int> dp2(v + 1, 0); //表示装满后最大价值
    vector<int> dp3(v + 1, 0); //表示最大价值
    vector<pair<int, int>> num(n, make_pair(0, 0));
    for (int i = 0; i < n; i++) {
        cin >> num[i].first >> num[i].second;
    }
    sort(num.begin(), num.end());
    
    reverse(num.begin(), num.end());
    for (int i = n - 1; i >= 0; i--) {
        for (int j = v; j >= num[i].first; j--) {
            dp1[j] = max(dp1[j], dp1[j - num[i].first] + num[i].first);
            if(j == dp1[j]) {
                dp2[j] = max(dp2[j], dp2[j - num[i].first] + num[i].second);
            }
            dp3[j] = max(dp3[j], dp3[j - num[i].first] + num[i].second);
        }
    }
    
    cout << dp3[v] << endl << dp2[v] << endl;
    return 0;
}