#pragma comment(linker, "/stack:247474112")
#pragma GCC optimize("Ofast")

#include<bits/stdc++.h>
 
using namespace std;
 
#define sz(x) x.size()
#define clr(x) x.clear()
#define mem(x ,y) memset(x , y , sizeof x )
#define all(a ) a.begin() , a.end()
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define pii pair<int , int>
#define endl "\n"
#define fast()   ios_base :: sync_with_stdio(false ) ; cin.tie(0) ; cout.tie(0) ;
#define dbg(args...) do {   cerr << #args << ' ' ;  print(args); } while(0); cerr<< endl ;
#define dbgv(v ) rep(i, sz(v) )  cerr << v[i] << ' ' ;  cout << endl ;
#define dbga(x, n) rep(i , n ) cerr << x[i] << ' ' ;  cout << endl
#define forn(i,a,n ) for(int  i = a ; i <= n ; i++ )
#define rep(i ,n ) for(int i = 0 ; i < n ; i++ )
#define repi(i ,n ) for(int i = 1 ; i <= n ; i++ )
#define repit(i, c) for( __typeof((c).begin()) i = (c).begin(); i != (c).end();++i )
#define si(a) scanf("%d",&a )
#define sl(a) scanf("%I64d",&a )
#define sd(a) scanf("%lf",&a )
#define sii(a , b) scanf("%d %d",&a , &b )
#define siii(a , b , c) sii(a, b ) ; si(c) ;
#define sdd(a , b) scanf("%lf %lf",&a , &b )
#define sll(a , b) scanf("%I64d %I64d",&a , &b )
#define wri(a )  printf("%d\n" , a ) ;
#define wrii(a ,b ) printf("%d %d\n" , a,  b ) ;
#define wrl(a )  printf("%I64d\n" , a ) ;
#define CASE(c ) printf("Case %d: " ,c) ;
const long long  mod = 1e9+7 ;
const int inf = 1e9  ;
const long long  lnf = 1e18 ;
 
int setbit(int n, int pos  ) { return n = n|(1<< pos) ; }
int resetbit(int n,int pos ) {  return n =  n & ~(1<<pos ); }
bool checkbit(int n,int pos ) { return (bool ) (n& (1<<pos))  ; }

template< typename T > void print(const T& v) {    cerr << v << ' ' ;}
template<typename  T> T modMul(T x, T y ) { x %= mod ; y %= mod ; return (x*y)%mod  ;  }
template<typename  T> T modAdd(T x, T y  ) { x %= mod ; y %= mod ; return (x+y)%mod ;  }
template< typename T1, typename... T2 > void print( const T1& first, const T2&... rest ){ print(first); print(rest...) ;}
template<typename  T> T modPow(T x, T k ) { if(k == 0 ) return 1; if(k&1  ) { return ( (x%mod)*modPow(x,k-1, mod )%mod )%mod ; } else { T ret = modPow(x,k/2 , mod ) ; ret %= mod ; return (ret*ret )%mod; } }
template<typename T> T ext_gcd(T num1 , T num2, T &X , T &Y ) { T r2,r1, q2, q1 , x2, x1, y2 ,y1 , x,  y, r   ; x2 = 1; y2 = 0;  x1 = 0; y1 = 1; for( r2 =num1 ,r1 = num2 ;r1 != 0 ; y2 = y1, y1 = y,x2 = x1 ,x1 = x ,r2 = r1, r1 = r) {q1 = r2/r1; x = x2 - q1*x1; y = y2 - q1*y1; r = r2%r1 ; } X = x2 ; Y = y2 ; return r2 ;  } 

template<typename T >
T modInv( T x , T m ) {  
    return modPow(x,m-2 , m) ; 
    long long ret, t ;
    ext_gcd( x, m ,ret ,t  ) ;
    ret %= m ;
    if(ret<0) ret += m  ;
    return ret;
}

typedef long long ll  ;
typedef unsigned long long  ull ;
typedef vector<int> vi  ;

//int dx[] = {0 , 0 ,+1, -1 } ;
//int dy[] = {-1, +1,0 , 0 };
/*
ll  prime[400] ; 
vector<ll> v  ; 
ll dp[M+2]  ,  a[M+2];

void  seive() {
    int cnt =0; 
    for(ll i=2 ; i<=300  ; i++ ) {
        if(prime[i]==0LL ) {
            for(ll j=i*i ; j<= 300; j += i ) {
                prime[j] = 1LL ; 
                
            }
        }
    }

    forn(i,2 , 300) if(prime[i] == 0LL ) v.pb(i) ; 
    //dbg(sz(v) ) ;
    //return cnt;  
}


*/
 
/////////////////////////////////////  code from here ///////////////////////////////////////////////////

const int M = 200002 ;  
//const ll N = 1e1 ;
//const int N =10;


int dp[102][M+2] , w[102] , cost[200];

int func(int id,int val ) {
    if(id<1) {
        if(val==0) return 0 ; 
        return inf; 
    }
    int &ans = dp[id][val] ; 
    if(ans!= -1 ) return ans ;
    ans = inf; 
    ans = min(ans , w[id]+ func(id-1, val -cost[id] ) ) ;
    ans = min(ans , func(id-1, val) )  ;

    return ans ; 
 
 

}
void solve() {
    int n ,q , tot =0 , ans =0; 
    cin >> n >> q ; 
    mem(dp , -1) ;
    repi(i , n) cin >> w[ i] >> cost[i] ;
    repi(i ,n ) tot += cost[i ] ;


    rep (i, 101) rep (j, tot+1) dp[i][j  ] = inf ; 
    
   // repi(i,n )dp[i][0] = 0 ; 
    dp[0][0]=0; 
    repi(i ,n ) {
        rep (j , tot+1) {
            if((j-cost[i])<0){
                dp[i][j]= dp[i-1][j] ;
            }else {
                dp[i][j ] = min(dp[i-1][j] , w[i] + dp[i-1][j-cost[i ] ]); 
            }
        }
        
    } 

    repi(i ,tot ) if(dp[n][i]<= q) ans=max(ans,  i ); 
    cout << ans << endl;  



}
 
int main() {

      //  freopen("in.txt", "r", stdin  );
    // freopen( "out.txt", "w",stdout );     
    fast();

    solve() ;


    return 0 ;

}

 
 
    

Measured memory_bytes: 80000