#include <iostream> #include <vector> using namespace std; int main() { int n, V; cin >> n >> V; vector<int> w(n), v(n); for (int i = 0; i < n; ++i) { cin >> w[i] >> v[i]; } // 方案1:不要求刚好装满 vector<int> dp1(V + 1, 0); // 方案2:要求刚好装满 vector<int> dp2(V + 1, -1); // -1 表示无法达到该体积 dp2[0] = 0; for (int i = 0; i < n; ++i) { for (int j = V; j >= w[i]; --j) { // 方案1:不要求刚好装满 dp1[j] = max(dp1[j], dp1[j - w[i]] + v[i]); // 方案2:要求刚好装满 if (dp2[j - w[i]] != -1) { dp2[j] = max(dp2[j], dp2[j - w[i]] + v[i]); } } } cout << dp1[V] << endl; cout << (dp2[V] == -1 ? 0 : dp2[V]) << endl; return 0; }