"""

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

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

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

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

"""

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



#入力

INF = 2000000000

"""

メモ : Pythonでは無限大を表す float('inf') があるが, 処理がかなり重たいので

       代わりにsum(v)より真に大きい 2*10^9 を INFとする.

       (https://atcoder.jp/contests/dp/tasks/dp_e において,PyPyを使用して,

        前者だと1060ms, 後者だと570msで2倍近く差が出ている.)

"""

n ,limit_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()))

sum_v = sum(v)

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

# dp[i][j]には重さが入る.

# dp[i][j]=(i番目までの品物から価値がちょうどｊになるための重さの最小値)



# ここからメイン

dp[0][0] = 0

for i in range(n):

    for j in range(sum_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])

            

# n個まで使って,重さがlimit_wを超えないで価値が最大のものを求める.

ans = 0

for i in range(sum_v + 1):

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

        ans = i

print(ans)

"""

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

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

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

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

"""

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



#入力

INF = 2000000000

"""

メモ : Pythonでは無限大を表す float('inf') があるが, 処理がかなり重たいので

       代わりにsum(v)より真に大きい 2*10^9 を INFとする.

       (https://atcoder.jp/contests/dp/tasks/dp_e において,PyPyを使用して,

        前者だと1060ms, 後者だと570msで2倍近く差が出ている.)

"""

n ,limit_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()))

sum_v = sum(v)

dp = [INF for i in range(sum_v + 1)]

# dp[i][j]には重さが入る.

# dp[i][j]=(i番目までの品物から価値がちょうどｊになるための重さの最小値)



# ここからメイン

dp[0] = 0

for i in range(n):

    for j in range(sum_v ,-1,-1):

        if j >= v[i]:

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



# n個まで使って,重さがlimit_wを超えないで価値が最大のものを求める.

ans = 0

for i in range(sum_v + 1):

    if dp[i] <= limit_w:

        ans = i

print(ans)

"""
重さと価値がそれぞれw_i,v_iであるようなn個の品物がある.
これらの品物の中から, 重さの総和がWを超えないように選んだ時の,
価値の総和の最大値を求めよ.
1<=n<=100, 1<=w_i<=10^7, 1<=v_i<=100, 1<=limit_w<=10^9
"""
# -------------------------------------------------------------------------------
# 入力
INF = 2000000000
"""
メモ : Pythonでは無限大を表す float('inf') があるが, 処理がかなり重たいので
       代わりにsum(v)より真に大きい 2*10^9 を INFとする.
       (https://atcoder.jp/contests/dp/tasks/dp_e において,PyPyを使用して,
        前者だと1060ms, 後者だと570msで2倍近く差が出ている.)
"""
n, limit_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()))
sum_v = sum(v)
dp = [[INF for i in range(sum_v + 1)] for j in range(n + 1)]
# dp[i][j]には重さが入る.
# dp[i][j]=(i番目までの品物から価値がちょうどｊになるための重さの最小値)
# ここからメイン
dp[0][0] = 0
for i in range(n):
    for j in range(sum_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])
# n個まで使って,重さがlimit_wを超えないで価値が最大のものを求める.
ans = 0
for i in range(sum_v + 1):
    if dp[n][i] <= limit_w:
        ans = i
print(ans)

"""
重さと価値がそれぞれw_i,v_iであるようなn個の品物がある.
これらの品物の中から, 重さの総和がWを超えないように選んだ時の,
価値の総和の最大値を求めよ.
1<=n<=100, 1<=w_i<=10^7, 1<=v_i<=100, 1<=limit_w<=10^9
"""
# -------------------------------------------------------------------------------
# 入力
INF = 2000000000
"""
メモ : Pythonでは無限大を表す float('inf') があるが, 処理がかなり重たいので
       代わりにsum(v)より真に大きい 2*10^9 を INFとする.
       (https://atcoder.jp/contests/dp/tasks/dp_e において,PyPyを使用して,
        前者だと1060ms, 後者だと570msで2倍近く差が出ている.)
"""
n, limit_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()))
sum_v = sum(v)
dp = [INF for i in range(sum_v + 1)]
# dp[i][j]には重さが入る.
# dp[i][j]=(i番目までの品物から価値がちょうどｊになるための重さの最小値)
# ここからメイン
dp[0] = 0
for i in range(n):
    for j in range(sum_v, -1, -1):
        if j >= v[i]:
            dp[j] = min(dp[j], dp[j - v[i]] + w[i])
# n個まで使って,重さがlimit_wを超えないで価値が最大のものを求める.
ans = 0
for i in range(sum_v + 1):
    if dp[i] <= limit_w:
        ans = i
print(ans)

-dp = [[INF for i in range(sum_v + 1)] for j in range(n + 1)] +dp = [INF for i in range(sum_v + 1)] -dp[0][0] = 0 +dp[0] = 0 -    for j in range(sum_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]) +    for j in range(sum_v, -1, -1): +        if j >= v[i]: +            dp[j] = min(dp[j], dp[j - v[i]] + w[i]) -    if dp[n][i] <= limit_w: +    if dp[i] <= limit_w: