j { dp[i][j] = dp[i-1][j] } else { dp[i][j] = max(v, dp[i-1][j], dp[i-1][j - w] + v) } } } print(dp[N][K])"> j { dp[i][j] = dp[i-1][j] } else { dp[i][j] = max(v, dp[i-1][j], dp[i-1][j - w] + v) } } } print(dp[N][K])"> j { dp[i][j] = dp[i-1][j] } else { dp[i][j] = max(v, dp[i-1][j], dp[i-1][j - w] + v) } } } print(dp[N][K])">
//12865
import Foundation

let NK = readLine()!.components(separatedBy: " ").map{ Int($0)! }
let N = NK[0]
let K = NK[1]
var dp = Array(repeating: Array(repeating: 0, count: K + 1), count: N + 1)

for i in 1...N {
    let WV = readLine()!.components(separatedBy: " ").map{ Int($0)! }
    let w = WV[0]
    let v = WV[1]
    
    for j in 1...K {
        if w > j {
            dp[i][j] = dp[i-1][j]
        } else {
            dp[i][j] = max(v, dp[i-1][j], dp[i-1][j - w] + v)
        }
    }
    
}

print(dp[N][K])