void main(){ import std.stdio, std.string, std.conv, std.algorithm; import std.range; int n; rd(n); auto v=new int[](n), w=new int[](n); foreach(i; 0..n) rd(v[i], w[i]); int vmax; rd(vmax); const wmax=100000; auto rec=new int[][](n+1, wmax+5); foreach(i; 0..n){ if(w[i]<=wmax) chmax(rec[i+1][w[i]], v[i]); for(int j=1; j<=wmax; j++){ chmax(rec[i+1][j], rec[i][j]); if(j+w[i]<=wmax && rec[i][j]>0) chmax(rec[i+1][j+w[i]], rec[i][j]+v[i]); } } auto arr=rec[n][0..(wmax+1)]; // [0, wmax] for(int i=1; i<=wmax; i++) chmax(arr[i], arr[i-1]); auto p=assumeSorted(arr); writeln(max(1, p.lowerBound(vmax).length)); auto ub=p.upperBound(vmax); if(ub.length>0) writeln(p.length-ub.length-1); else writeln("inf"); } void chmax(T)(ref T x, T y){ if(x