"""

重さと価値がそれぞれw_i,v_iであるようなn個の品物がある.

これらの品物の中から, 重さの総和がWを超えないように選んだ時の,

価値の総和の最大値を求めよ.

1<=n<=100, 1<=w_i<=10^7, 1<=v_i<=100, 1<=W<=10^9

"""

#-------------------------------------------------------------------------------



#入力

INF=float('inf')

n ,W= list(map(int, input().split()))

w=[0]*n

v=[0]*n

for i in range(n):

    w[i],v[i] = list(map(int, input().split()))

V=sum(v)

dp = [[INF for i in range(V+1)] for j in range(n+1)]



#ここからメイン

dp[0][0]=0

for i in range(n):

    for j in range(V+1):

        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])

ans=0

for i in range(V+1):

    if dp[n][i]<=W:

        ans=i

print(ans)

"""

重さと価値がそれぞれw_i,v_iであるようなn個の品物がある.

これらの品物の中から, 重さの総和がWを超えないように選んだ時の,

価値の総和の最大値を求めよ.

1<=n<=100, 1<=w_i<=10^7, 1<=v_i<=100, 1<=W<=10^9

"""

#-------------------------------------------------------------------------------



#入力

INF=2*10**9

n,W = list(map(int,input().split()))

w=[0]*n

v=[0]*n

for i in range(n):

    w[i],v[i] = list(map(int, input().split()))

max_v=max(v)

dp = [[INF for i in range(n*max_v+1)] for j in range(n+1)]



#ここからメイン

dp[0][0]=0

for i in range(n):

    for j in range(n*max_v+1):

        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])

ans=0

for i in range(n*max_v+1):

    if dp[n][i]<=W:

        ans=i

print(ans)

"""
重さと価値がそれぞれw_i,v_iであるようなn個の品物がある.
これらの品物の中から, 重さの総和がWを超えないように選んだ時の,
価値の総和の最大値を求めよ.
1<=n<=100, 1<=w_i<=10^7, 1<=v_i<=100, 1<=W<=10^9
"""
# -------------------------------------------------------------------------------
# 入力
INF = float("inf")
n, W = list(map(int, input().split()))
w = [0] * n
v = [0] * n
for i in range(n):
    w[i], v[i] = list(map(int, input().split()))
V = sum(v)
dp = [[INF for i in range(V + 1)] for j in range(n + 1)]
# ここからメイン
dp[0][0] = 0
for i in range(n):
    for j in range(V + 1):
        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])
ans = 0
for i in range(V + 1):
    if dp[n][i] <= W:
        ans = i
print(ans)

"""
重さと価値がそれぞれw_i,v_iであるようなn個の品物がある.
これらの品物の中から, 重さの総和がWを超えないように選んだ時の,
価値の総和の最大値を求めよ.
1<=n<=100, 1<=w_i<=10^7, 1<=v_i<=100, 1<=W<=10^9
"""
# -------------------------------------------------------------------------------
# 入力
INF = 2 * 10**9
n, W = list(map(int, input().split()))
w = [0] * n
v = [0] * n
for i in range(n):
    w[i], v[i] = list(map(int, input().split()))
max_v = max(v)
dp = [[INF for i in range(n * max_v + 1)] for j in range(n + 1)]
# ここからメイン
dp[0][0] = 0
for i in range(n):
    for j in range(n * max_v + 1):
        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])
ans = 0
for i in range(n * max_v + 1):
    if dp[n][i] <= W:
        ans = i
print(ans)

-INF = float("inf") +INF = 2 * 10**9 -V = sum(v) -dp = [[INF for i in range(V + 1)] for j in range(n + 1)] +max_v = max(v) +dp = [[INF for i in range(n * max_v + 1)] for j in range(n + 1)] -    for j in range(V + 1): +    for j in range(n * max_v + 1): -for i in range(V + 1): +for i in range(n * max_v + 1):