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

///...................................*****.................................................///

/// Author : Tanvir Ahmed ///

/// Department of Computer Science ///

/// & Engineering ///

/// Comilla University , Bangladesh. ///

///...................................*****.................................................///



/*....................................Values................................................*/

#define inf 1<<30

#define p5 100007

#define p6 1000007

#define PI acos(-1)

#define M 1000000007



/*....................................Functions.............................................*/

#define sqr(x) x*x

#define sc scanf

#define pf printf

#define scin(x) sc("%d",&(x))

#define scin2(x,y) sc("d",&(x),&(y))

#define scin3(x,y,z) sc("d%d",&(x),&(y),&(z))

#define scln(x) sc("%lld",&(x))

#define min3(a,b,c) min(a,min(b,c))

#define max3(a,b,c) max(a,max(b,c))

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

#define ok cout << "ok" << endl

#define mem(x,y) memset(x,y,sizeof(x))

#define READ(f) freopen(f, "r", stdin)

#define WRITE(f) freopen(f, "w", stdout)



/*...................................Data_Types............................................*/

#define lli long long int

#define ull unsigned long long int

#define pii pair < int, int>

#define pll pair < ll, ll>

#define veci vector<int>

#define vecl vector<long long int>

#define vecp vector< pair<int,int> >

#define mapstrint map< string , int >

#define mapstrstr map< string , string >

#define mapint map< int, int >

#define uset unordered_set

#define umap unordered_map

#define pq priority_queue



#define pb push_back

#define mp make_pair

#define ss stringstream



/*.....................................Loops...............................................*/

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

#define rev( i , a , b ) for( i=a ; i>=b ; i--)

#define repx( i ,a,b, x) for( i=a ; i<b ; i+=x)



#define FastRead ios_base::sync_with_stdio(0);cin.tie(0)



//int month[]={31,28,31,30,31,30,31,31,30,31,30,31};

//long power(long int x, long int y){ int temp; if( y == 0) return 1; temp = power(x, y/2); if (y%2 == 0) return temp*temp; else return x*temp*temp; }

/*lli gcd(lli x,lli y)

{

if(x==0) return y;

return gcd(y%x,x);

}*/

/*

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

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

*/



using namespace std;



lli W,n,w[105],val[105],profit[5][100005];



void knapsack(int item,int chk)

{

    if(item>n)

        return;

    if(chk==0)

    {

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

        {

            if(val[item]>i)

            {

                profit[1][i] = profit[0][i];

            }

            else if(profit[0][i]>(w[item]+profit[0][i-val[item]]))

                profit[1][i] = w[item]+profit[0][i-val[item]];

            else

                profit[1][i]=profit[0][i];

        }

        knapsack(item+1,1);

    }

    else

    {

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

        {

            if(val[item]>i)

            {

                profit[0][i] = profit[1][i];

            }

            else if(profit[1][i]>(w[item]+profit[1][i-val[item]]))

                profit[0][i] = w[item]+profit[1][i-val[item]];

            else

                profit[0][i]=profit[1][i];

                //cout<<profit[0][i]<<" ";

        }

        //cout<<endl;

        knapsack(item+1,0);

    }

}



int main()

{

    scln(n),scln(W);

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

    {

        scln(w[i]);

        scln(val[i]);

    }

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

    {

        profit[0][i] = inf;

    }

    knapsack(1,0);

    lli mx = 0;

    if(n%2==0)

    {

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

        {

            if(profit[0][i]<=W)

                mx = max(i,mx);

        }

    }

    else

    {

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

        {

            if(profit[1][i]<=W)

                mx = max(mx,i);

        }

    }

    pf("%lld\n",mx);

    return 0;

}


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

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

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

#define     bug(a,b)        cout<<a<<"\t"<<b<<"\n";

#define     Case(a,b)       cout<<"Case "<<a<<": "<<b<<"\n";

#define     watch(a)        cout<<fixed<<setprecision(a)

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

#define     Endl            "\n";

#define     tab             "\t"

#define     reset(a,b)      memset(a,b,sizeof(a));

#define     sfl(a)          scanf(" %lld", &a);

#define     sf(a)           scanf(" %d", &a);

#define     srt(a)          sort(a.begin(),a.end());

#define     pi              2*acos(0.0)

const int sz=1e5+9;

const ll inf=1e18L+9;

ll dp[sz];





void solve(){

    reset(dp,inf);

    int n,w;

    sf(n);

    sf(w);

    vector<pair<ll,int>>v(n);

    dp[0]=0;

    int pnt=0;

    lp(i,0,n){

       sfl(v[i].first);

       sf(v[i].second);

       pnt+=v[i].second;

    }

    //bug(pnt, 1);

   // sort(v.begin(),v.end(),com);

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



        for(int j=pnt-v[i].second;j>=0;j--){

            dp[j+v[i].second]=min( dp[j+v[i].second],dp[j]+v[i].first);

        }



    }

   // bug("140 dp",dp[140]);

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

        if(dp[i]<=w){

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

            return;

        }

    }

}



int main(){

    //FasterIO;

    #ifndef ONLINE_JUDGE

    //    freopen("1.txt","r",stdin);

    #endif

    //int t;

//cin>>t;

   // while(t--)

        solve();

}