#include #include #include using namespace std; int n; vector > t; int f[2][6000]; int main() { int w,s; while (scanf("%d %d",&w,&s)==2) { t.push_back({s,w}); } n=t.size(); sort(t.begin(),t.end()); int inf=1e9; f[0][0]=0; for (int k=1;k<=n;k++) f[0][k]=inf; for (int i=1;i<=n;i++) { s=t[i-1].first; w=t[i-1].second; f[i%2][0]=0; for (int k=1;k<=n;k++) f[i%2][k]=inf; for (int k=1;k<=i;k++) { f[i%2][k]=f[(i-1)%2][k]; if (s>=f[(i-1)%2][k-1]+w) { f[i%2][k]=min(f[i%2][k], f[(i-1)%2][k-1]+w); } } } int r=0; while (r