#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define REP(i,n) for(int (i)=0;(i)<(int)(n);(i)++) #define RREP(i,n) for(int (i)=(int)(n)-1;i>=0;i--) #define REMOVE(Itr,n) (Itr).erase(remove((Itr).begin(),(Itr).end(),n),(Itr).end()) #define UNIQUE(Itr) sort((Itr).begin(),(Itr).end()); (Itr).erase(unique((Itr).begin(),(Itr).end()),(Itr).end()) ll N; vector v,w; ll V; ll dp[100010]; int main() { cin >> N; v.resize(N); w.resize(N); REP(i,N) cin >> v[i] >> w[i]; cin >> V; REP(i,100010) dp[i] = 0; REP(i,N) { RREP(j,100010) { if(j - w[i] >= 0) { dp[j] = max(dp[j],dp[j - w[i]] + v[i]); } } } ll ansmin = 1e9; ll ansmax = -1e9; for(int i=1; i<100010; i++) { if(dp[i] == V) { ansmin = min(ansmin,(ll)i); ansmax = max(ansmax,(ll)i); } } /*REP(i,11) cout << dp[i] << " " ; cout << endl;*/ ll sum = 0; REP(i,w.size()) sum += w[i]; if(sum < ansmax) { cout << ansmin << endl; cout << "inf" << endl; } else { cout << ansmin << endl; cout << ansmax << endl; } return 0; }