package main
import (
"fmt"
)
func main() {
var n,v int
fmt.Scan(&n, &v)
value := make([]int, n)
weight := make([]int, n)
for i:=0;i<n;i++ {
fmt.Scan(&weight[i])
fmt.Scan(&value[i])
}
dp := make([]int, v+1)
for i:=0;i<n;i++ {
for j:=v;j-weight[i] >= 0;j-- {
dp[j] = max(dp[j], dp[j-weight[i]] + value[i])
}
}
dp2 := make([]int, v+1)
for i:=0;i<v+1;i++ {
dp2[i] = -9999
}
dp2[0]=0
// for i:=0;i<n;i++ {
// dp2[weight[i]] = max(dp2[weight[i]], value[i])
// }
for i:=0;i<n;i++ {
for j:=v;j-weight[i] >= 0;j-- {
// if dp2[weight[i]] >
dp2[j] = max(dp2[j], dp2[j-weight[i]] + value[i])
}
}
// fmt.Println(dp)
// fmt.Println(dp2)
fmt.Println(dp[v])
if dp2[v] > 0 {
fmt.Println(dp2[v])
} else {
fmt.Println(0)
}
}
func max(a,b int) int {
if a < b {
return b
}
return a
}