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
}