#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { int n; cin >> n; vector v(n), w(n); for(int i=0; i> v[i] >> w[i]; int vMax; cin >> vMax; int vSum = accumulate(v.begin(), v.end(), 0); int wSum = accumulate(w.begin(), w.end(), 0); if(vSum == vMax){ cout << wSum << endl << "inf" << endl; return 0; } vector dp(wSum+1, 0); for(int i=0; i=0; --j){ dp[j+w[i]] = max(dp[j+w[i]], dp[j] + v[i]); } } int a = find(dp.begin() + 1, dp.end(), vMax) - dp.begin(); int b = wSum - (find(dp.rbegin(), dp.rend(), vMax) - dp.rbegin()); cout << a << endl << b << endl; return 0; }