//bismillahir rahmanir rahim            //Author:Fayed Anik
 
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
 
using namespace std;
//using namespace __gnu_pbds;
 
//#define         ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define         ll                          long  long
#define         lf                          double
#define         pb(x)                       push_back(x)
#define         ull                         unsigned long long
#define         sfl(a)                      scanf("%lld",&a)
#define         sf(a)                       scanf("%d",&a)
#define         pf(a)                       printf("%d\n",a)
#define         pfl(a)                      printf("%lld\n",a)
#define         FOR(x,n)                    for(ll x=1;x<=n;++x)
#define         pii                         pair< ll , ll >
#define         mp(a,b)                     make_pair(a,b)
#define         UNIQUE(v)                   v.resize(distance(v.begin(),unique(v.begin(),v.end())))
#define         mod                         1000000007
#define         INF                         2e18
#define         EPS                         1e-15
#define         f1                          first
#define         f2                          second
#define         all(v)                      v.begin(),v.end()
#define         PI                          acos(-1)
#define         printminusone               printf("-1\n")
#define         bug                         printf("bug")
#define         FILEIN                      freopen("in.txt","r",stdin)
#define         FILEOUT                     freopen("out.txt","w",stdout)
 
//ll SET(ll mask,ll pos){ return mask = (mask | (1ll<<pos)); }
//ll RESET(ll mask,ll pos){ return mask = mask & ~(1ll<<pos); }
//bool CHECK(ll mask,ll pos) { return (bool) (mask & (1ll<<pos)); }
//priority_queue <ll, vector<ll>, greater<ll> > pq;
//int dx[]={0,0,1,-1,1,1,-1,-1};
//int dy[]={1,-1,0,0,1,-1,1,-1};

ll dp[101][100001],a[101],b[101];

/*
ll F(ll pos,ll now){
    if( pos > n ){
        if( now>= target ) return 0;
        else return INF;
    }
    ll &ret = dp[pos][now];
    if ( ~ret ) return ret;
    ret = a[pos]+F(pos+1,now+b[pos]);
    ret = min(ret,F(pos+1,now));
    return dp[pos][now] = ret;
}
*/

int main(){
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    ll n,w;
    sfl(n),sfl(w);
    for(ll i=1;i<=n;i++){
        sfl(a[i]),sfl(b[i]);
    }
    for(ll i=0;i<=n;i++){
        for(ll j=0;j<=1e5;j++) dp[i][j] = INF;
    }
    for(ll i=1;i<=n;i++){
        dp[i][b[i]] = min(dp[i-1][b[i]],a[i]);
        for(ll j=1e5;j>=1;j--){
            if( j-b[i]>=1 and dp[i-1][j-b[i]]!=INF){
                dp[i][j] = min(dp[i-1][j],dp[i-1][j-b[i]]+a[i]);
            }
            else if(j!=b[i]){
                dp[i][j] = dp[i-1][j];
            }
        }
    }
    ll ans = 0;
    for(ll j=1;j<=1e5;j++){
        if( dp[n][j]!=INF and dp[n][j]<=w ) ans = max(ans,j);
    }
    pfl(ans);
    /*
    ll lw = 0,hi = 1e5,mid,ans=0,val;
    while(lw<=hi){
        mid = (lw+hi)/2;
        target = mid;
        memset(dp,-1,sizeof dp);
        val = F(1,0);
        if( val<=w ){
            ans = mid;
            lw = mid+1;
        }
        else{
            hi = mid-1;
        }
    }
    */
    return 0;
}


Measured memory_bytes: 82748