#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int multipleKnapsack(int n, int m, vector<int>& weight, vector<int>& value, vector<int>& amount, vector<int>& dp) {
for (int i = 0; i < n; i++) {
for (int j = m; j >= weight[i]; j--) {
for (int k = 1; k <= amount[i] && k * weight[i] <= j; k++) {
dp[j] = max(dp[j], dp[j - k * weight[i]] + k * value[i]);
}
}
}
return dp[m];
}
int main() {
int n, m;
cin >> n >> m;
vector<int> weight(n), value(n), amount(n);
for (int i = 0; i < n; i++) {
cin >> weight[i] >> value[i] >> amount[i];
}
vector<int> dp(m + 1, 0);
int maxValue = multipleKnapsack(n, m, weight, value, amount, dp);
cout << maxValue << endl;
return 0;
}