Point: 100.0
Time limit: 1.0s
Memory limit: 640 M
Input: stdin
Output: stdout
Author:  
Problem type
Ngôn ngữ cho phép
C, C#, C++, Java, Pascal, Python, Text

Trong siêu thị có \(n(0<n \le 1000)\) đồ vật, đồ vật thứ \(i\) có trọng lượng là \(w[i], 0<w[i] \le 1000\) và giá trị là \(v[i], 0<v[i] \le 1000\)

Một tên trộm đột nhập vào siêu thị, tên trộm mang một cái túi có thể chứa tối đa là \(M(0<M \le 5000)\), tên trộm loay hoay với việc chọn các đồ vật sao cho giá trị lớn nhất mà tổng khối lượng vẫn đảm bảo chiếc balo.

Yêu cầu:

Hãy chọn các vật sao cho đặt vừa trong chiếc túi mà tổng giá trị lớn nhất có thể. Mỗi vật chỉ được chọn đúng 1 lần.

Dữ liệu vào Specification

  • Dòng đầu tiên chứa hai số nguyên dương \(n\)\(M (0 < n \le 10^3, 0<M \le 5000)\).
  • \(n\) dòng tiếp theo mỗi dòng ghi 2 số nguyên \(w_i\)\(v_i\) là trọng lượng và giá trị của đồ vật thứ \(i\).

Dữ liệu ra Specification

  • Ghi ra giá trị lớn nhất của các đồ vật mà tên trộm có thể lấy.

Sample Input

5 15
12 4
2 2
1 1
1 2
4 10

Sample Output

15

Giải thích: chọn các vật 2, 3, 4, 5