stablegradients/pie-gem5-pairs huggingface dataset:
// Slower C++ solution:
#include <iostream>

#include <cstring>

using namespace std;

const int maxn=1e5+5;

using ll = long long;

ll dp[maxn];

ll w[maxn],v[maxn];

int main()

{

   ll n,m,mm;

   cin>>n>>mm;

   m=0;

   memset(dp,0x3f,sizeof(dp));

   for(int i=1;i<=n;++i){

       cin>>w[i]>>v[i];

       m+=v[i];

   }

   dp[0]=0;

   for(int i=1;i<=n;++i){

       for(ll j=m;j>=0;--j){

           if(j-v[i]>=0) dp[j]=min(dp[j],dp[j-v[i]]+w[i]);

          // cout<<dp[j]<<endl;

       }

   }

   for(int i=m;i>=0;--i){

       if(dp[i]<=mm){

           cout<<i<<endl;

           break;

       }

   }

   return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.7231995514477898x):
#include<bits/stdc++.h>

using namespace std;



typedef long long int ll;

typedef pair<int,int> pi;

priority_queue<pi, vector<pi>, greater<pi> > pq; //min heap



ll mini(ll a,ll b){	return a<b?a:b;}

ll maxi(ll a,ll b){	return a>b?a:b;}

ll gcd(ll a,ll b){	if(b == 0)	return a;return gcd(b,a%b);}

ll binpow(ll n,ll x){	ll ans = 1;while(x){if(x & 1)	ans *= n;n *= n;x >>= 1;}return ans;}



#define INF 1e15+10



int main()

{

    ios::sync_with_stdio(false);

    cin.tie(0);

    cout.tie(0);



    ll n,w;

    cin>>n>>w;

    vector<ll> dp(n*1e3 +10, INF); // dp on the possible values and task is to minimize this dp[] which will be the sum of the weights 

    dp[0] = 0;



    ll rows[n][2];

    for(int i=0;i<n;++i)    cin>>rows[i][0]>>rows[i][1];

    ll tot = 0;

    for(int i=0;i<n;++i)    tot += rows[i][1];



    for(int i=0;i<n;++i){

        for(int j=tot - rows[i][1];j>=0;--j){

            dp[j + rows[i][1]] = min(dp[j + rows[i][1]], dp[j] + rows[i][0]);

        }

    }



    ll answer = 0;



    for(ll j=0;j<=tot; ++j){

        if(dp[j] <= w){

            answer = max(answer, j);

        }

    }



    cout<<answer<<"\n";



    return 0;

}
// Slower C++ solution:
#include <iostream>

#include <algorithm>

#include <cmath>

#include <cstdlib>

#include <cstdio>

#include <cstring>

#include <iomanip>

#include <string>

#include <set>

#include <vector>

#include <queue>

#include <stack>

using namespace std;

#define ms(a, x) memset(a, x, sizeof(a))

#define fore(i, a, n) for (long long i = a; i < n; i++)

#define ford(i, a, n) for (long long i = n - 1; i >= a; i--)

#define si(a) scanf("%d", &a)

#define sii(a, b) scanf("%d%d", &a, &b)

#define debug(a) cout << a << endl

#define endl '\n'

#define pi acos(-1.0)

#define tr t[root]

#define lson t[root << 1]

#define rson t[root << 1 | 1]

#define IO ios::sync_with_stdio(false), cin.tie(0)

const double eps = 1e-8;

inline int sgn(const double &x) { return x < -eps ? -1 : x > eps; }

typedef long long ll;

const int inf = 0x3f3f3f3f;

const int maxn=1000100;

#define maxn0 1e9+7;

//=================================================



ll sum;

ll w[maxn];

ll dp[maxn];

ll v[maxn];



// void init() {

//     for(ll i=0;i<=n;i++){

//         w[i]=0;

//         v[i]=0;

//     }

// }

int main() {

    IO;

    ll n,W;

    cin>>n>>W;

    memset(dp,inf,sizeof(dp));

    dp[0]=0;

    for(int i=1;i<=n;i++){

        cin>>w[i]>>v[i];

        // sum+=v[i];

    }

    for(int i=1;i<=n;i++) {

        for(int j=100000;j>=v[i];j--) {

            dp[j]=min(dp[j],dp[j-v[i]]+w[i]);

        }

    }

    ll ans=-1;

    for(int i=1;i<=100000;++i) {

        if(dp[i]<=W)

            ans=max(ans,1LL*i);

    }

    cout<<ans<<endl;



    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 10.113427541335392x):
#include<bits/stdc++.h>

using namespace std;



typedef long long int ll;

typedef pair<int,int> pi;

priority_queue<pi, vector<pi>, greater<pi> > pq; //min heap



ll mini(ll a,ll b){	return a<b?a:b;}

ll maxi(ll a,ll b){	return a>b?a:b;}

ll gcd(ll a,ll b){	if(b == 0)	return a;return gcd(b,a%b);}

ll binpow(ll n,ll x){	ll ans = 1;while(x){if(x & 1)	ans *= n;n *= n;x >>= 1;}return ans;}



#define INF 1e15+10



int main()

{

    ios::sync_with_stdio(false);

    cin.tie(0);

    cout.tie(0);



    ll n,w;

    cin>>n>>w;

    vector<ll> dp(n*1e3 +10, INF); // dp on the possible values and task is to minimize this dp[] which will be the sum of the weights 

    dp[0] = 0;



    ll rows[n][2];

    for(int i=0;i<n;++i)    cin>>rows[i][0]>>rows[i][1];

    ll tot = 0;

    for(int i=0;i<n;++i)    tot += rows[i][1];



    for(int i=0;i<n;++i){

        for(int j=tot - rows[i][1];j>=0;--j){

            dp[j + rows[i][1]] = min(dp[j + rows[i][1]], dp[j] + rows[i][0]);

        }

    }



    ll answer = 0;



    for(ll j=0;j<=tot; ++j){

        if(dp[j] <= w){

            answer = max(answer, j);

        }

    }



    cout<<answer<<"\n";



    return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>



#define forn(i, n) for (int i = 0; i < int(n); ++i)

#define for1(i, n) for (int i = 1; i <= int(n); ++i)

#define fore(i, l, r) for (int i = int(l); i <= int(r); ++i)

#define ford(i, n) for (int i = int(n)-1; i >= 0; --i)

#define pb push_back

#define eb emplace_back

#define ms(a, x) memset(a, x, sizeof(a))

#define F first

#define S second

#define endl '\n'

#define de(x) cout<<#x<<" = "<<(x)<<endl

#define de2(x,y) cout<<#x<<" = "<<(x) <<' '<< #y<<" = "<<y<<endl;



using namespace std;



typedef long long ll;

typedef pair<int, int> pii;

const int INF = 0x3f3f3f3f;

mt19937 gen(chrono::high_resolution_clock::now().time_since_epoch().count());



const int N=1e5+5;

ll dp[N];

int v[105],w[105];

int main() {



    ios::sync_with_stdio(false);

    cin.tie(nullptr);

	int N,W;

	cin>>N>>W;

	int sum=0;

	forn(i,N){

		cin>>w[i]>>v[i];

		sum+=v[i];

	}

	ms(dp,INF);

	dp[0]=0;

	forn(i,N){

		for(int j=sum;j>=v[i];j--){

			dp[j]=min(dp[j],dp[j-v[i]]+w[i]);

		}

	}

	ll ans=0;

	for(int i=sum;i>=0;i--){

		if(dp[i]<=W){

			ans=i;

			break;

		}

	}

	cout<<ans;

	return 0;

}




// Faster C++ solution for the same problem (measured speedup: 1.7415184933712813x):
#include<bits/stdc++.h>

using namespace std;



typedef long long int ll;

typedef pair<int,int> pi;

priority_queue<pi, vector<pi>, greater<pi> > pq; //min heap



ll mini(ll a,ll b){	return a<b?a:b;}

ll maxi(ll a,ll b){	return a>b?a:b;}

ll gcd(ll a,ll b){	if(b == 0)	return a;return gcd(b,a%b);}

ll binpow(ll n,ll x){	ll ans = 1;while(x){if(x & 1)	ans *= n;n *= n;x >>= 1;}return ans;}



#define INF 1e15+10



int main()

{

    ios::sync_with_stdio(false);

    cin.tie(0);

    cout.tie(0);



    ll n,w;

    cin>>n>>w;

    vector<ll> dp(n*1e3 +10, INF); // dp on the possible values and task is to minimize this dp[] which will be the sum of the weights 

    dp[0] = 0;



    ll rows[n][2];

    for(int i=0;i<n;++i)    cin>>rows[i][0]>>rows[i][1];

    ll tot = 0;

    for(int i=0;i<n;++i)    tot += rows[i][1];



    for(int i=0;i<n;++i){

        for(int j=tot - rows[i][1];j>=0;--j){

            dp[j + rows[i][1]] = min(dp[j + rows[i][1]], dp[j] + rows[i][0]);

        }

    }



    ll answer = 0;



    for(ll j=0;j<=tot; ++j){

        if(dp[j] <= w){

            answer = max(answer, j);

        }

    }



    cout<<answer<<"\n";



    return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

const int N = 1e5+100;

const int M = 200;

typedef long long ll;

int a[N],b[N],n,m;

ll f[N];



int main(){

	scanf("%d%d",&n,&m);

	for (int i = 0; i < n; ++i)

		scanf("%d%d",&a[i],&b[i]);

	memset(f, 0x3f, sizeof f);

	f[0] = 0;

	for (int i = 0; i < n; ++i)

		for (int j = N - 10; j >= 0; j--)

			if (j - b[i] >= 0) f[j] = min(f[j], f[j-b[i]] + a[i]);



	int ans = 0;

	for (int i = 0; i < N; ++i)

		if (f[i] <= m) ans = i;

	printf("%d\n",ans);

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 2.9400077153347324x):
#include<bits/stdc++.h>

using namespace std;



typedef long long int ll;

typedef pair<int,int> pi;

priority_queue<pi, vector<pi>, greater<pi> > pq; //min heap



ll mini(ll a,ll b){	return a<b?a:b;}

ll maxi(ll a,ll b){	return a>b?a:b;}

ll gcd(ll a,ll b){	if(b == 0)	return a;return gcd(b,a%b);}

ll binpow(ll n,ll x){	ll ans = 1;while(x){if(x & 1)	ans *= n;n *= n;x >>= 1;}return ans;}



#define INF 1e15+10



int main()

{

    ios::sync_with_stdio(false);

    cin.tie(0);

    cout.tie(0);



    ll n,w;

    cin>>n>>w;

    vector<ll> dp(n*1e3 +10, INF); // dp on the possible values and task is to minimize this dp[] which will be the sum of the weights 

    dp[0] = 0;



    ll rows[n][2];

    for(int i=0;i<n;++i)    cin>>rows[i][0]>>rows[i][1];

    ll tot = 0;

    for(int i=0;i<n;++i)    tot += rows[i][1];



    for(int i=0;i<n;++i){

        for(int j=tot - rows[i][1];j>=0;--j){

            dp[j + rows[i][1]] = min(dp[j + rows[i][1]], dp[j] + rows[i][0]);

        }

    }



    ll answer = 0;



    for(ll j=0;j<=tot; ++j){

        if(dp[j] <= w){

            answer = max(answer, j);

        }

    }



    cout<<answer<<"\n";



    return 0;

}
// Slower C++ solution:
#include<iostream>

#include<cstdlib>

#include<cstdio>

#include<algorithm>

#include<cmath>

#include<cstring>

#include<stack>

#define LL long long

using namespace std;

LL n,m;

LL dp[100011];

LL x,y,ans;

LL read()

{

	LL _=0,__=1;char ch=getchar();

	while(ch<'0'||ch>'9') {if(ch=='-')__=-1;ch=getchar();}

	while(ch>='0'&&ch<='9'){_=_*10+ch-'0';ch=getchar();}

	return _*__;

}

int main()

{

	n=read();m=read(); 

	for(int i=1;i<=100001;i++)

	dp[i]=1e9+7;

	for(int i=1;i<=n;i++)

	{

		x=read();y=read();

		for(int j=100000;j>=y;j--)

		{

			dp[j]=min(dp[j],dp[j-y]+x);

		}

	}

	for(int i=1;i<=100001;i++)

	{

		if(dp[i]<=m)

		ans=max(ans,(LL)i);

	}

	printf("%lld\n",ans);

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 2.4460224343166526x):
#include<bits/stdc++.h>

using namespace std;



typedef long long int ll;

typedef pair<int,int> pi;

priority_queue<pi, vector<pi>, greater<pi> > pq; //min heap



ll mini(ll a,ll b){	return a<b?a:b;}

ll maxi(ll a,ll b){	return a>b?a:b;}

ll gcd(ll a,ll b){	if(b == 0)	return a;return gcd(b,a%b);}

ll binpow(ll n,ll x){	ll ans = 1;while(x){if(x & 1)	ans *= n;n *= n;x >>= 1;}return ans;}



#define INF 1e15+10



int main()

{

    ios::sync_with_stdio(false);

    cin.tie(0);

    cout.tie(0);



    ll n,w;

    cin>>n>>w;

    vector<ll> dp(n*1e3 +10, INF); // dp on the possible values and task is to minimize this dp[] which will be the sum of the weights 

    dp[0] = 0;



    ll rows[n][2];

    for(int i=0;i<n;++i)    cin>>rows[i][0]>>rows[i][1];

    ll tot = 0;

    for(int i=0;i<n;++i)    tot += rows[i][1];



    for(int i=0;i<n;++i){

        for(int j=tot - rows[i][1];j>=0;--j){

            dp[j + rows[i][1]] = min(dp[j + rows[i][1]], dp[j] + rows[i][0]);

        }

    }



    ll answer = 0;



    for(ll j=0;j<=tot; ++j){

        if(dp[j] <= w){

            answer = max(answer, j);

        }

    }



    cout<<answer<<"\n";



    return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

#define MAX 100005

#define pb push_back

#define mp make_pair

#define pii pair<long long,long long>

#define read(a) scanf("%d",&a)

#define p1(a) cout<<"Check "<<a<<endl;

#define p2(a,b) cout<<"Check "<<a<<' '<<b<<endl;

#define p3(a,b,c) cout<<"Check "<<a<<' '<<b<<' '<<c<<endl;

#define fo(i,n) for(i=0;i<n;i++)

#define ll long long

#define clr(a) memset(a,0,sizeof(a))

#define MOD 10000000000

#define INF 10000000000000



using namespace std;



int n,cp;

ll cost[MAX];

ll weight[MAX];

ll dp[MAX];





int main()

{

    cin>>n>>cp;

    for(int i=0;i<n;i++){

        scanf("%lld%lld",&weight[i],&cost[i]);

    }

    for(int i=0;i<=MAX;i++) dp[i]=INF;

    dp[0]=0;

    for(int i=0;i<n;i++){

        for(int j=MAX;j>0;j--){

            if(j-cost[i]>=0 && dp[j-cost[i]]!=INF){

                dp[j]=min(dp[j],dp[j-cost[i]]+weight[i]);

            }

        }

    }

    for(int j=MAX;j>=0;j--){

        if(dp[j]<=cp){

            cout<<j<<endl;

            break;

            //break;

        }

    }



    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 2.3162022199153074x):
#include<bits/stdc++.h>

using namespace std;



typedef long long int ll;

typedef pair<int,int> pi;

priority_queue<pi, vector<pi>, greater<pi> > pq; //min heap



ll mini(ll a,ll b){	return a<b?a:b;}

ll maxi(ll a,ll b){	return a>b?a:b;}

ll gcd(ll a,ll b){	if(b == 0)	return a;return gcd(b,a%b);}

ll binpow(ll n,ll x){	ll ans = 1;while(x){if(x & 1)	ans *= n;n *= n;x >>= 1;}return ans;}



#define INF 1e15+10



int main()

{

    ios::sync_with_stdio(false);

    cin.tie(0);

    cout.tie(0);



    ll n,w;

    cin>>n>>w;

    vector<ll> dp(n*1e3 +10, INF); // dp on the possible values and task is to minimize this dp[] which will be the sum of the weights 

    dp[0] = 0;



    ll rows[n][2];

    for(int i=0;i<n;++i)    cin>>rows[i][0]>>rows[i][1];

    ll tot = 0;

    for(int i=0;i<n;++i)    tot += rows[i][1];



    for(int i=0;i<n;++i){

        for(int j=tot - rows[i][1];j>=0;--j){

            dp[j + rows[i][1]] = min(dp[j + rows[i][1]], dp[j] + rows[i][0]);

        }

    }



    ll answer = 0;



    for(ll j=0;j<=tot; ++j){

        if(dp[j] <= w){

            answer = max(answer, j);

        }

    }



    cout<<answer<<"\n";



    return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

typedef long long int ll;

const int MAX=1e5+10;

ll dp[MAX];

int main (){

    int N,W;cin >> N >> W;

    memset(dp,63,sizeof dp);

    dp[0]=0;

    for(int i=0;i<N;i++){

        int w,val;

        cin >> w >> val;

        for(int j=MAX;j>=0;j--){

            if(j-val>=0)

                dp[j]=min(dp[j],dp[j-val]+w);

        }



    }

    int res=0;

    for(int i=0;i<MAX;i++){

        if(dp[i]<=W) res = max(res,i);

    }

    cout<<res<<endl;

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 2.953845035690437x):
#include <bits/stdc++.h>



#define fst first

#define snd second

#define fore(i,a,b) for(int i=a, ThxDem=b; i<ThxDem; ++i)

#define pb push_back

#define ALL(s) s.begin(),s.end()

#define FIN ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define SZ(s) int(s.size())

#define DBG(x) cerr <<#x << " = " << (x) << "\n"



#define SQR(x) ((x) * (x))



#define PI 3.1415926535897932385

#define INF 1000111222

#define eps 1e-7

#define maxN 11



using namespace std;



typedef long long ll;

typedef vector<ll> vll;

typedef pair<ll,ll> pll;

typedef pair<int,int> pii;

typedef vector<string> vstr;

typedef vector<vll> vvll;

typedef vector<bool> vbool;

typedef vector<pll> vpll;

typedef vector<vpll> vvpll;

typedef vector<vbool> vvbool;



int main(){FIN



	ll n,w,s=0;

	cin >> n >> w;

	vll ws(n),vs(n);

	fore(i,0,n){

		cin >> ws[i] >> vs[i];

		s+=vs[i];

	}

	vll dp(s+1,1e18L);

	dp[0] = 0;	

	fore(i,0,n){

		for(int j=(s-vs[i]);j>=0;j--)

			dp[j+vs[i]] = min(dp[j+vs[i]],dp[j]+ws[i]);

	}

	ll ans = 0;

	fore(i,0,s+1){

		if(dp[i]<=w) ans = max(ans,(ll)i);

	}

	cout << ans << "\n";

	return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



#define pb push_back

#define mk make_pair

#define fi first

#define se second

#define eb emplace_back



typedef long long ll;

typedef pair<int,int> ii;

typedef vector< pair<int,int> > vii;

const ll INF = 0x3f3f3f3f3f3fef;



const int V = 1e5+2;

const int N = 102;



ll dp[V];

ll p[N];

ll v[N];

ll n,w;

 

int main() {

    ios_base::sync_with_stdio(false);

    for(int i = 0; i < V; i++) dp[i] = INF;



    cin >> n >> w;

    for(int i = 0; i < n; i++) cin >> p[i] >> v[i];

    

    dp[0] = 0;



    for(int i = 0; i < n; i++) 

        for(ll j = V-1; j-v[i] >= 0; j--)

            dp[j] = min(dp[j], dp[j-v[i]]+p[i]);



    for(int i = V-1; i >= 0; i--)

        if(dp[i] <= w) { cout << i << endl; return 0; }





    return 0;

}




// Faster C++ solution for the same problem (measured speedup: 2.504377194339764x):
#include <bits/stdc++.h>



#define fst first

#define snd second

#define fore(i,a,b) for(int i=a, ThxDem=b; i<ThxDem; ++i)

#define pb push_back

#define ALL(s) s.begin(),s.end()

#define FIN ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define SZ(s) int(s.size())

#define DBG(x) cerr <<#x << " = " << (x) << "\n"



#define SQR(x) ((x) * (x))



#define PI 3.1415926535897932385

#define INF 1000111222

#define eps 1e-7

#define maxN 11



using namespace std;



typedef long long ll;

typedef vector<ll> vll;

typedef pair<ll,ll> pll;

typedef pair<int,int> pii;

typedef vector<string> vstr;

typedef vector<vll> vvll;

typedef vector<bool> vbool;

typedef vector<pll> vpll;

typedef vector<vpll> vvpll;

typedef vector<vbool> vvbool;



int main(){FIN



	ll n,w,s=0;

	cin >> n >> w;

	vll ws(n),vs(n);

	fore(i,0,n){

		cin >> ws[i] >> vs[i];

		s+=vs[i];

	}

	vll dp(s+1,1e18L);

	dp[0] = 0;	

	fore(i,0,n){

		for(int j=(s-vs[i]);j>=0;j--)

			dp[j+vs[i]] = min(dp[j+vs[i]],dp[j]+ws[i]);

	}

	ll ans = 0;

	fore(i,0,s+1){

		if(dp[i]<=w) ans = max(ans,(ll)i);

	}

	cout << ans << "\n";

	return 0;

}
// Slower C++ solution:
//by Top1

#include <bits/stdc++.h>

     

#define f first

#define s second

#define int long long

#define ld long double

#define ull unsigned long long

#define pii pair <int, int>

#define pll pair <long, long>

#define mp make_pair

#define pb push_back

#define pf push_front

#define pp pop_back

#define rev reverse

#define all(s) s.begin(), s.end()

#define sz(s) (int)s.size()

#define forn(i, a, b) for (int i = a; i <= b; i++)

#define boost ios_base::sync_with_stdio(false); cin.tie(0),cout.tie(0);

#define nxtp next_permutation

#define pvtp prev_permutation

#define KZ return 

#define x1 x21212121

#define y1 y21212121

#define sqr(x) x * x 

 

const int inf = (1e9) + 1;

const int mod = 1e9 + 7;

const int maxn = 1e5 + 111;

     

using namespace std;



int q, n, w, a[maxn], b[maxn], dp[105][maxn], ans;



void solve(){    

	cin >> n >> w;



	for (int i = 1; i <= n; i++)

		cin >> a[i] >> b[i];



	for (int i = 0; i <= n; i++)

		for (int j = 1e5; j >= 0; j--)

			dp[i][j] = inf;



	dp[0][0] = 0;



	for (int i = 1; i <= n; i++){

		for (int j = 1e5; j >= 0; j--){

			dp[i][j] = dp[i - 1][j];

			if (j - b[i] >= 0)

				dp[i][j] = min(dp[i][j], dp[i - 1][j - b[i]] + a[i]);

			if (dp[i][j] <= w)

				ans = max(ans, j);

		}

		/*for (int j = 1; j <= 20; j++)

			cout << dp[i][j] << " ";

		cout << endl;	*/

		//cout << dp[i][100000] << endl;

	}



	//cout << dp[n][100000] << " ";



	/*for (int i = 0; i <= w; i++)

		cout << dp[i] << " ";

	*/

	cout << ans;

}



main(){

    boost;

	    

	q = 1;



	while (q--){

		solve();

	}

}

// Faster C++ solution for the same problem (measured speedup: 7.169479483559957x):
#include <bits/stdc++.h>



#define fst first

#define snd second

#define fore(i,a,b) for(int i=a, ThxDem=b; i<ThxDem; ++i)

#define pb push_back

#define ALL(s) s.begin(),s.end()

#define FIN ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define SZ(s) int(s.size())

#define DBG(x) cerr <<#x << " = " << (x) << "\n"



#define SQR(x) ((x) * (x))



#define PI 3.1415926535897932385

#define INF 1000111222

#define eps 1e-7

#define maxN 11



using namespace std;



typedef long long ll;

typedef vector<ll> vll;

typedef pair<ll,ll> pll;

typedef pair<int,int> pii;

typedef vector<string> vstr;

typedef vector<vll> vvll;

typedef vector<bool> vbool;

typedef vector<pll> vpll;

typedef vector<vpll> vvpll;

typedef vector<vbool> vvbool;



int main(){FIN



	ll n,w,s=0;

	cin >> n >> w;

	vll ws(n),vs(n);

	fore(i,0,n){

		cin >> ws[i] >> vs[i];

		s+=vs[i];

	}

	vll dp(s+1,1e18L);

	dp[0] = 0;	

	fore(i,0,n){

		for(int j=(s-vs[i]);j>=0;j--)

			dp[j+vs[i]] = min(dp[j+vs[i]],dp[j]+ws[i]);

	}

	ll ans = 0;

	fore(i,0,s+1){

		if(dp[i]<=w) ans = max(ans,(ll)i);

	}

	cout << ans << "\n";

	return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>



using namespace std;



#define loop(i, n) for(int i = 0;i < int(n);i++)

#define rloop(i, n) for(int i = int(n);i >= 0;i--)

#define range(i, a, b) for(int i = int(a);i <= int(b);i++)

#define SZ(c) int(c.size())

#define ALL(c) c.begin(), c.end()

#define RALL(c) c.rbegin(), c.rend()

#define PI acos(-1)

#define pb push_back

#define mp make_pair

#define fr first

#define sc second

#define sfi1(v) scanf("%d",&v)

#define sfi2(v1, v2) scanf("%d %d",&v1,&v2)

#define sfi3(v1, v2, v3) scanf("%d %d %d",&v1,&v2,&v3)

#define sfll1(v) scanf("%I64d",&v);

#define sfll2(v1, v2) scanf("%I64d %I64d",&v1,&v2)

#define sfll3(v1, v2, v3) scanf("%I64d %I64d %I64d",&v1,&v2,&v3)

#define endl '\n'



typedef vector<int> vi;

typedef vector<pair<int, int> > vii;

typedef long long ll;

typedef pair<int, int> pii;



const int N = 105;

const int V = 1e5 + 5;

int dp[2][V];

int w[N], v[N];

int n, W;





int main() {



#ifndef ONLINE_JUDGE

//    freopen("in.in", "r", stdin);

    //freopen("out.in", "w", stdout);

#endif

    ios_base::sync_with_stdio(0);

    cin.tie(0);

    cout.tie(0);



    cin >> n >> W;

    range(i, 1, V - 1)dp[n & 1][i] = W + 2;



    loop(i, n)cin >> w[i] >> v[i];



    rloop(i, n - 1) {

        loop(j, V) {

            dp[i & 1][j] = dp[i & 1 ^ 1][j];

            if (j >= v[i])dp[i & 1][j] = min(dp[i & 1][j], dp[i & 1 ^ 1][j - v[i]] + w[i]);

        }

    }



    int ans = 0;

    rloop(i, V - 1) {

        if (dp[0][i] <= W) {

            ans = i;

            break;

        }

    }



    cout << ans << endl;



    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 2.585424843903562x):
#include <bits/stdc++.h>



#define fst first

#define snd second

#define fore(i,a,b) for(int i=a, ThxDem=b; i<ThxDem; ++i)

#define pb push_back

#define ALL(s) s.begin(),s.end()

#define FIN ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define SZ(s) int(s.size())

#define DBG(x) cerr <<#x << " = " << (x) << "\n"



#define SQR(x) ((x) * (x))



#define PI 3.1415926535897932385

#define INF 1000111222

#define eps 1e-7

#define maxN 11



using namespace std;



typedef long long ll;

typedef vector<ll> vll;

typedef pair<ll,ll> pll;

typedef pair<int,int> pii;

typedef vector<string> vstr;

typedef vector<vll> vvll;

typedef vector<bool> vbool;

typedef vector<pll> vpll;

typedef vector<vpll> vvpll;

typedef vector<vbool> vvbool;



int main(){FIN



	ll n,w,s=0;

	cin >> n >> w;

	vll ws(n),vs(n);

	fore(i,0,n){

		cin >> ws[i] >> vs[i];

		s+=vs[i];

	}

	vll dp(s+1,1e18L);

	dp[0] = 0;	

	fore(i,0,n){

		for(int j=(s-vs[i]);j>=0;j--)

			dp[j+vs[i]] = min(dp[j+vs[i]],dp[j]+ws[i]);

	}

	ll ans = 0;

	fore(i,0,s+1){

		if(dp[i]<=w) ans = max(ans,(ll)i);

	}

	cout << ans << "\n";

	return 0;

}