#include #define rep(i,n) for (int i = 0; i < (n); ++i) #define rrep(i,n) for (int i = (n)-1; i >= 0; --i) #define chmax(a, b) a = max(a, b) #define chmin(a, b) a = min(a, b) #define all(x) (x).begin(), (x).end() using namespace std; using ll = long long; using P = pair; using VI = vector; using VVI = vector; struct C { int t; int v; }; int n; C vt[10000]; bool dp[20001] = {true}; bool cmp(C x, C y) {return x.t+x.v < y.t+y.v;} int main() { scanf("%d", &n); rep(i, n) { scanf("%d%d", &vt[i].v, &vt[i].t); } sort(vt, vt + n, cmp); rep(i, n) { int vi = vt[i].v; rrep(j, vt[i].t) dp[j + vi] |= dp[j]; } rrep(i, 20001) if (dp[i]) { cout << i << endl; return 0; } }