package main

import (
    "fmt"
)
type Item struct {
    count, value, weight int
}
func main() {
    var n,w int
    fmt.Scan(&n, &w)
    arr := make([]Item, n)
    for i:=0;i<n;i++ {
        fmt.Scan(&arr[i].count, &arr[i].weight, &arr[i].value)
    }
    dp := make([]int, w+1)
    for i:=0;i<n;i++ {
        for j:=w;j>=arr[i].weight;j-- {
            cnt := arr[i].count
            for cnt > 0 {
                if j >= arr[i].weight * cnt {
                    dp[j] = max(dp[j], dp[j - arr[i].weight * cnt] + arr[i].value * cnt)
                }
                cnt--
            }
        }
    }
    // fmt.Println(dp)
    fmt.Println(dp[w])
}
func max(a,b int) int {
    if a > b {
        return a
    }
    return b
}