stablegradients/pie-gem5-pairs huggingface dataset:
// Slower C++ solution:




#include<iostream>

#include<cstdio>

#include<cstring>

#include<cstdlib>

#include<algorithm>

#include<stack>

#include<queue>

#include<vector>

#include<set>

#include<string>

#include<cmath>

#include<map>

#include<bitset>

#include<utility>

//#include<unordered_map>

#ifdef LOCAL

#include"file.h"

#endif



using namespace std;



typedef long long LL;

typedef unsigned long long ULL;

const double eps = 1e-12;

const double Pi = 3.1415926535897932;

const int dir[4][2] = { -1,0,1,0,0,-1,0,1 };

//const int dir[8][2] = { -2,-1,-2,1,2,-1,2,1,-1,2,-1,-2,1,2,1,-2 };



















































const int maxn = 1e5 + 5;

LL f[maxn];





int main() {

#ifdef LOCAL

	fileopen();

#endif

	int n, C;

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

	memset(f, 63, sizeof(f));

	f[0] = 0;

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

		int w, v;

		scanf("%d%d", &w, &v);

		for (int i = maxn - 3; i >= v; i--)if (f[i - v] + w <= C) {

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

		}

	}

	LL ans = 0;

	for (int i = 0; i <= maxn - 3; i++)if (f[i] <= C)ans = max(ans, (LL)i);

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



#ifdef LOCAL

	fileclose();

#endif

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 2.0014221189142205x):
/*

* Note: This template uses some c++11 functions , so you have to compile it with c++11 flag.

*       Example:-   $ g++ -std=c++11 main.cpp -o main

*

*/



#include <iostream>

#include <string>

#include <vector>

#include <algorithm>

#include <sstream>

#include <queue>

#include <deque>

#include <bitset>

#include <iterator>

#include <list>

#include <stack>

#include <map>

#include <set>

#include <functional>

#include <numeric>

#include <utility>



using namespace std;

int main()

{

	ios::sync_with_stdio(false);

	cin.tie(0);



	int n, w;

	cin >> n >> w;

	int mmax = n*1000+1;

	int bn = n + 1;

	int dd[bn][mmax];



	// initialize

	for (int nn = 0; nn < bn; nn++) {

	  for (int v = 0; v < mmax; v++) {

	    dd[nn][v] = -1;

	  }

	}



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

	  dd[nn][0] = 0;

	}

	for (int nn = 1; nn < bn; nn++) {

	  int www, nu;

	  cin >> www >> nu;

	  for (int v = 1; v < mmax; v++) {

	    // don't use item nn-1

	    int cur = -1;

	    if (dd[nn-1][v] != -1) {

	      cur = dd[nn-1][v];

	    }



	    // use item nn-1

	    if (nu <= v) {

	      int rem_v = v - nu;

	      if (dd[nn-1][rem_v] != -1) {

		int cand = dd[nn-1][rem_v] + www;

		if (cand <= w && (cur == -1 || cand < cur)) {

		  cur = cand;

		}

	      }

	    }



	    if (cur != -1) {

	      dd[nn][v] = cur;

	    }

	  }

	}

	bool done = false;

	for (int v = mmax-1; v >= 0; v--) {

	  if (done) {

	    break;

	  }

	  for (int nn = 0; nn < bn; nn++) {

	    if (dd[nn][v] != -1) {

	      cout << v << '\n';

	      done = true;

	      break;

	    }

	  }

	}



	if (!done) {

	  cout << 0 << '\n';

	}

	return 0;

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

using namespace std;

const int inf = 2e9+7;



long long w[101], v[101];

long long f[110][100100];



int main()

{

    int N, V, i, j;



    cin>>N>>V;



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

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

    fill(f[0],f[0]+100001,inf);

    f[0][0] = 0;

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

    {

        for(j=0;j<=100000;j++)

            if(j >= v[i])

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

            else

                f[i+1][j] = f[i][j];

    }

    int res=0;

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

        if(f[N][i]<=V)

            res = i;



    cout<<res<<endl;



    return 0;

}

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

#define ll long long

#define pb push_back

#define mod 1000000007

#define mp make_pair

#define pi acos(-1)

#define line cout<<"------------------"<<endl

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

#define filein freopen("input.txt","r",stdin)

#define fileout freopen("output.txt","w",stdout)

#define inf (int)1e9+7

using namespace std;

ll n ;

ll w[109],val[109];

ll dp[100009];

ll weight;

int  main()

{

    cin>>n>>weight;

    for(ll i=1;i<=100007;i++) dp[i]=inf;

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

    {

        cin>>w[i]>>val[i];

        for(ll j=100005;j>=val[i];j--)

        {

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

        }

    }

    for( ll i=100005;i>=0;i--)

    {

        if(dp[i]<=weight)

        {

            cout<<i<<endl;

            return 0;

        }

    }







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

using namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

ll n,W;

int w[100+10],v[100+10];

int dp[100+10][100000+10];

int main()

{

    cin>>n>>W;

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

    fill(dp[0],dp[0]+100000+1,inf);

    dp[0][0]=0;

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

    {

        for(int j=0;j<=100000;j++)

        {

            if(j<v[i])  dp[i+1][j]=dp[i][j];

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

        }

    }

    int res=0;

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

    {

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

    }

    cout<<res;

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.7216137142272356x):
#include <iostream>

#include <vector>

#define ll long long int



using namespace std;



struct Item {

	ll weight;

	ll value;

};



const ll INF = 1LL << 32;

vector<ll> dp(100001, INF);



ll knapSack(ll W, Item items[], ll n){

	ll sum = dp[0] = 0;

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

		sum += items[i].value;

    	for(ll j = sum; j >= items[i].value; j--){

         	dp[j] = min(dp[j], dp[j - items[i].value] + items[i].weight);

    	}

	}

	

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

		if(dp[i] <= W){

			return i;

		}

	}

}



int main(){

	Item items[100];

	ll N, W;

	cin >> N >> W;

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

		cin >> items[i].weight >> items[i].value;

	cout << knapSack(W, items, N) << endl;

	return 0;

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

using namespace std;

const int inf = 2e9+7;



long long w[101], v[101];

long long f[110][100100];



int main()

{

    int N, V, i, j;



    cin>>N>>V;



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

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

    fill(f[0],f[0]+100001,inf);

    f[0][0] = 0;

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

    {

        for(j=0;j<=100000;j++)

            if(j >= v[i])

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

            else

                f[i+1][j] = f[i][j];

    }

    int res=0;

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

        if(f[N][i]<=V)

            res = i;



    cout<<res<<endl;



    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 2.7865905352149105x):
#include <iostream>

#include <vector>

#define ll long long int



using namespace std;



struct Item {

	ll weight;

	ll value;

};



const ll INF = 1LL << 32;

vector<ll> dp(100001, INF);



ll knapSack(ll W, Item items[], ll n){

	ll sum = dp[0] = 0;

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

		sum += items[i].value;

    	for(ll j = sum; j >= items[i].value; j--){

         	dp[j] = min(dp[j], dp[j - items[i].value] + items[i].weight);

    	}

	}

	

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

		if(dp[i] <= W){

			return i;

		}

	}

}



int main(){

	Item items[100];

	ll N, W;

	cin >> N >> W;

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

		cin >> items[i].weight >> items[i].value;

	cout << knapSack(W, items, N) << endl;

	return 0;

}
// Slower C++ solution:




#include<iostream>

#include<cstdio>

#include<cstring>

#include<cstdlib>

#include<algorithm>

#include<stack>

#include<queue>

#include<vector>

#include<set>

#include<string>

#include<cmath>

#include<map>

#include<bitset>

#include<utility>

//#include<unordered_map>

#ifdef LOCAL

#include"file.h"

#endif



using namespace std;



typedef long long LL;

typedef unsigned long long ULL;

const double eps = 1e-12;

const double Pi = 3.1415926535897932;

const int dir[4][2] = { -1,0,1,0,0,-1,0,1 };

//const int dir[8][2] = { -2,-1,-2,1,2,-1,2,1,-1,2,-1,-2,1,2,1,-2 };



















































const int maxn = 1e5 + 5;

LL f[maxn];





int main() {

#ifdef LOCAL

	fileopen();

#endif

	int n, C;

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

	memset(f, 63, sizeof(f));

	f[0] = 0;

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

		int w, v;

		scanf("%d%d", &w, &v);

		for (int i = maxn - 3; i >= v; i--)if (f[i - v] + w <= C) {

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

		}

	}

	LL ans = 0;

	for (int i = 0; i <= maxn - 3; i++)if (f[i] <= C)ans = max(ans, (LL)i);

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



#ifdef LOCAL

	fileclose();

#endif

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.3009201747089305x):
#include <iostream>

#include <vector>

#define ll long long int



using namespace std;



struct Item {

	ll weight;

	ll value;

};



const ll INF = 1LL << 32;

vector<ll> dp(100001, INF);



ll knapSack(ll W, Item items[], ll n){

	ll sum = dp[0] = 0;

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

		sum += items[i].value;

    	for(ll j = sum; j >= items[i].value; j--){

         	dp[j] = min(dp[j], dp[j - items[i].value] + items[i].weight);

    	}

	}

	

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

		if(dp[i] <= W){

			return i;

		}

	}

}



int main(){

	Item items[100];

	ll N, W;

	cin >> N >> W;

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

		cin >> items[i].weight >> items[i].value;

	cout << knapSack(W, items, N) << endl;

	return 0;

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

#define ll long long

#define pb push_back

#define mod 1000000007

#define mp make_pair

#define pi acos(-1)

#define line cout<<"------------------"<<endl

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

#define filein freopen("input.txt","r",stdin)

#define fileout freopen("output.txt","w",stdout)

#define inf (int)1e9+7

using namespace std;

ll n ;

ll w[109],val[109];

ll dp[100009];

ll weight;

int  main()

{

    cin>>n>>weight;

    for(ll i=1;i<=100007;i++) dp[i]=inf;

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

    {

        cin>>w[i]>>val[i];

        for(ll j=100005;j>=val[i];j--)

        {

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

        }

    }

    for( ll i=100005;i>=0;i--)

    {

        if(dp[i]<=weight)

        {

            cout<<i<<endl;

            return 0;

        }

    }







}


// Faster C++ solution for the same problem (measured speedup: 1.422908386595995x):
#include <iostream>

#include <vector>

#define ll long long int



using namespace std;



struct Item {

	ll weight;

	ll value;

};



const ll INF = 1LL << 32;

vector<ll> dp(100001, INF);



ll knapSack(ll W, Item items[], ll n){

	ll sum = dp[0] = 0;

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

		sum += items[i].value;

    	for(ll j = sum; j >= items[i].value; j--){

         	dp[j] = min(dp[j], dp[j - items[i].value] + items[i].weight);

    	}

	}

	

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

		if(dp[i] <= W){

			return i;

		}

	}

}



int main(){

	Item items[100];

	ll N, W;

	cin >> N >> W;

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

		cin >> items[i].weight >> items[i].value;

	cout << knapSack(W, items, N) << endl;

	return 0;

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

using namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

ll n,W;

int w[100+10],v[100+10];

int dp[100+10][100000+10];

int main()

{

    cin>>n>>W;

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

    fill(dp[0],dp[0]+100000+1,inf);

    dp[0][0]=0;

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

    {

        for(int j=0;j<=100000;j++)

        {

            if(j<v[i])  dp[i+1][j]=dp[i][j];

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

        }

    }

    int res=0;

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

    {

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

    }

    cout<<res;

    return 0;

}

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



using namespace std;

 

typedef long long ll;

typedef long double ld;

typedef unsigned long long ull;

 

#define nl '\n'

 

#define y1 aza_ibagaliev

 

#define f first

#define s second

	

#define ed end()

#define bg begin()

#define rbg rbegin()

 

#define rv reverse

#define mp make_pair

#define pb push_back

#define ppb pop_back

#define ppf pop_front

 

#define sz size()

#define all(x) x.bg, x.ed

 

#define pll pair < ll, ll >

#define pii pair < int, int >

 

#define sqr(x) ((x) * 1ll * (x))

#define sqrd(x) ((x) * 1.0 * (x))

 

#define speed ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)

 

#define rnl cout << "----------------------------------------" << nl

 

#define bit __builtin_popcount

 

inline ll bip(ll x, ll n, ll mod){ll res=1;while(n){if(n & 1){res=(res*x)%mod;}x=(x*x)%mod;n>>=1;}return res;}

        	

const int ppr = 257;

const ll INF = 2e18;

const int inf = 2e9;

const int mod = 1e9 + 7;

const int N = 1e5 + 123;

const ld pi = 3.1741592653589793238462643;

 

const int dx[] = {1, 0, -1, 0};

const int dy[] = {0, 1, 0, -1};



int n, W, w[N], v[N];

ll dp[N];



main() {             	

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

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



//	srand(time(NULL));



	cin >> n >> W;



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

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



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

		dp[i] = INF;

                       

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

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

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

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

			}



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

		if(dp[i] <= W) return cout << i, 0;



    return 0;                                        

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

using namespace std;

const int inf = 2e9+7;



long long w[101], v[101];

long long f[110][100100];



int main()

{

    int N, V, i, j;



    cin>>N>>V;



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

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

    fill(f[0],f[0]+100001,inf);

    f[0][0] = 0;

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

    {

        for(j=0;j<=100000;j++)

            if(j >= v[i])

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

            else

                f[i+1][j] = f[i][j];

    }

    int res=0;

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

        if(f[N][i]<=V)

            res = i;



    cout<<res<<endl;



    return 0;

}

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



using namespace std;

 

typedef long long ll;

typedef long double ld;

typedef unsigned long long ull;

 

#define nl '\n'

 

#define y1 aza_ibagaliev

 

#define f first

#define s second

	

#define ed end()

#define bg begin()

#define rbg rbegin()

 

#define rv reverse

#define mp make_pair

#define pb push_back

#define ppb pop_back

#define ppf pop_front

 

#define sz size()

#define all(x) x.bg, x.ed

 

#define pll pair < ll, ll >

#define pii pair < int, int >

 

#define sqr(x) ((x) * 1ll * (x))

#define sqrd(x) ((x) * 1.0 * (x))

 

#define speed ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)

 

#define rnl cout << "----------------------------------------" << nl

 

#define bit __builtin_popcount

 

inline ll bip(ll x, ll n, ll mod){ll res=1;while(n){if(n & 1){res=(res*x)%mod;}x=(x*x)%mod;n>>=1;}return res;}

        	

const int ppr = 257;

const ll INF = 2e18;

const int inf = 2e9;

const int mod = 1e9 + 7;

const int N = 1e5 + 123;

const ld pi = 3.1741592653589793238462643;

 

const int dx[] = {1, 0, -1, 0};

const int dy[] = {0, 1, 0, -1};



int n, W, w[N], v[N];

ll dp[N];



main() {             	

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

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



//	srand(time(NULL));



	cin >> n >> W;



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

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



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

		dp[i] = INF;

                       

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

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

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

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

			}



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

		if(dp[i] <= W) return cout << i, 0;



    return 0;                                        

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

using namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

ll n,W;

int w[100+10],v[100+10];

int dp[100+10][100000+10];

int main()

{

    cin>>n>>W;

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

    fill(dp[0],dp[0]+100000+1,inf);

    dp[0][0]=0;

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

    {

        for(int j=0;j<=100000;j++)

        {

            if(j<v[i])  dp[i+1][j]=dp[i][j];

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

        }

    }

    int res=0;

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

    {

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

    }

    cout<<res;

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 3.1472444837338314x):
#include <cstdio>

#include <cstring>

#include <algorithm>

using namespace std;

int n,m,w,v,s=0,ans=0;

long long f[100005];

int main()

{

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

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

	f[0]=0;

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

		scanf("%d%d",&w,&v);

		s+=v;

		for(int j=s;j>=v;--j)

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

	}

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

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

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

	return 0;

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

 

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

#define ll long long

#define ff first

#define ss second

 

const int maxn=105 ;

const int maxv=1005 ;

const int inf=1e9+10 ;

 

using namespace std ;

 

ll dp[maxn*maxv] ;

pair<ll,ll> v[maxn] ;

int ans ;

 

int main()

{

  lp(i,1,maxn*maxv) dp[i]=inf ;

  dp[0]=0;

 

  int n, w ;

 

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

  lp(i,0,n) scanf("%lld%lld", &v[i].ff, &v[i].ss) ;

 

  lp(i,0,n)

  {

    for(int j=ans+v[i].ss ; j >= v[i].ss ; j -- )

    {

      if(dp[ j-v[i].ss ] + v[i].ff <= w )

      {

        dp[j] = min(dp[j] , dp[ j-v[i].ss ] + v[i].ff ) , ans=max(ans,j) ;

      }

    }

  }

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

}

// Faster C++ solution for the same problem (measured speedup: 1.8517232646018293x):
#include <cstdio>

#include <cstring>

#include <algorithm>

using namespace std;

int n,m,w,v,s=0,ans=0;

long long f[100005];

int main()

{

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

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

	f[0]=0;

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

		scanf("%d%d",&w,&v);

		s+=v;

		for(int j=s;j>=v;--j)

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

	}

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

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

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

	return 0;

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

using namespace std;

const int inf = 2e9+7;



long long w[101], v[101];

long long f[110][100100];



int main()

{

    int N, V, i, j;



    cin>>N>>V;



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

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

    fill(f[0],f[0]+100001,inf);

    f[0][0] = 0;

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

    {

        for(j=0;j<=100000;j++)

            if(j >= v[i])

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

            else

                f[i+1][j] = f[i][j];

    }

    int res=0;

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

        if(f[N][i]<=V)

            res = i;



    cout<<res<<endl;



    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.094105383748396x):
#include <cstdio>

#include <cstring>

#include <algorithm>

using namespace std;

int n,m,w,v,s=0,ans=0;

long long f[100005];

int main()

{

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

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

	f[0]=0;

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

		scanf("%d%d",&w,&v);

		s+=v;

		for(int j=s;j>=v;--j)

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

	}

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

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

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

	return 0;

}
// Slower C++ solution:




#include<iostream>

#include<cstdio>

#include<cstring>

#include<cstdlib>

#include<algorithm>

#include<stack>

#include<queue>

#include<vector>

#include<set>

#include<string>

#include<cmath>

#include<map>

#include<bitset>

#include<utility>

//#include<unordered_map>

#ifdef LOCAL

#include"file.h"

#endif



using namespace std;



typedef long long LL;

typedef unsigned long long ULL;

const double eps = 1e-12;

const double Pi = 3.1415926535897932;

const int dir[4][2] = { -1,0,1,0,0,-1,0,1 };

//const int dir[8][2] = { -2,-1,-2,1,2,-1,2,1,-1,2,-1,-2,1,2,1,-2 };



















































const int maxn = 1e5 + 5;

LL f[maxn];





int main() {

#ifdef LOCAL

	fileopen();

#endif

	int n, C;

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

	memset(f, 63, sizeof(f));

	f[0] = 0;

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

		int w, v;

		scanf("%d%d", &w, &v);

		for (int i = maxn - 3; i >= v; i--)if (f[i - v] + w <= C) {

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

		}

	}

	LL ans = 0;

	for (int i = 0; i <= maxn - 3; i++)if (f[i] <= C)ans = max(ans, (LL)i);

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



#ifdef LOCAL

	fileclose();

#endif

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 2.3781837991854693x):
#include <cstdio>

#include <cstring>

#include <algorithm>

using namespace std;

int n,m,w,v,s=0,ans=0;

long long f[100005];

int main()

{

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

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

	f[0]=0;

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

		scanf("%d%d",&w,&v);

		s+=v;

		for(int j=s;j>=v;--j)

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

	}

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

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

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

	return 0;

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

#define ll long long

#define pb push_back

#define mod 1000000007

#define mp make_pair

#define pi acos(-1)

#define line cout<<"------------------"<<endl

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

#define filein freopen("input.txt","r",stdin)

#define fileout freopen("output.txt","w",stdout)

#define inf (int)1e9+7

using namespace std;

ll n ;

ll w[109],val[109];

ll dp[100009];

ll weight;

int  main()

{

    cin>>n>>weight;

    for(ll i=1;i<=100007;i++) dp[i]=inf;

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

    {

        cin>>w[i]>>val[i];

        for(ll j=100005;j>=val[i];j--)

        {

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

        }

    }

    for( ll i=100005;i>=0;i--)

    {

        if(dp[i]<=weight)

        {

            cout<<i<<endl;

            return 0;

        }

    }







}


// Faster C++ solution for the same problem (measured speedup: 2.601187788854805x):
#include <cstdio>

#include <cstring>

#include <algorithm>

using namespace std;

int n,m,w,v,s=0,ans=0;

long long f[100005];

int main()

{

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

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

	f[0]=0;

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

		scanf("%d%d",&w,&v);

		s+=v;

		for(int j=s;j>=v;--j)

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

	}

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

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

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

	return 0;

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

#include <vector>

#define ll long long int



using namespace std;



struct Item {

	ll weight;

	ll value;

};



const ll INF = 1LL << 32;

vector<ll> dp(100001, INF);



ll knapSack(ll W, Item items[], ll n){

	ll sum = dp[0] = 0;

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

		sum += items[i].value;

    	for(ll j = sum; j >= items[i].value; j--){

         	dp[j] = min(dp[j], dp[j - items[i].value] + items[i].weight);

    	}

	}

	

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

		if(dp[i] <= W){

			return i;

		}

	}

}



int main(){

	Item items[100];

	ll N, W;

	cin >> N >> W;

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

		cin >> items[i].weight >> items[i].value;

	cout << knapSack(W, items, N) << endl;

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.828078190668053x):
#include <cstdio>

#include <cstring>

#include <algorithm>

using namespace std;

int n,m,w,v,s=0,ans=0;

long long f[100005];

int main()

{

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

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

	f[0]=0;

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

		scanf("%d%d",&w,&v);

		s+=v;

		for(int j=s;j>=v;--j)

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

	}

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

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

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

	return 0;

}