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
}