#include #include #include #include using namespace std; int main() { int n, m, cap; cin >> n >> m >> cap; vector> plans(n); for(auto& x: plans) cin >> x[0] >> x[1] >> x[2]; vector> sellprice(n), sellamt(n); for(int i = 0; i < n; i++) { sellprice[i].resize(m); for(auto& x: sellprice[i]) cin >> x; } for(int i = 0; i < n; i++) { sellamt[i].resize(m); for(auto& x: sellamt[i]) cin >> x; } array dp; dp.fill(int64_t(1e18)); dp[0] = 0; for(int tt = 0; tt < n; tt++) { array ndp; ndp.fill(int64_t(1e18)); auto [priceper, powerneed, solargen] = plans[tt]; for(int i = 0; i <= cap; i++) { ndp[i+solargen] = min(ndp[i+solargen], dp[i]); } for(int i = 1; i <= 250; i++) { ndp[i] = min(ndp[i], ndp[i-1] + priceper); } for(int amt = 0; amt <= 250; amt++) { for(int j = 0; j < m; j++) { if(amt + sellamt[tt][j] <= 250) { ndp[amt] = min(ndp[amt], ndp[amt + sellamt[tt][j]] - sellprice[tt][j]); } } } for(int i = 249; i >= 0; i--) ndp[i] = min(ndp[i], ndp[i+1]); for(int i = 0; i <= cap; i++) ndp[i] = ndp[i + powerneed]; for(int i = cap+1; i <= 250; i++) { ndp[i] = 1e18; } swap(dp, ndp); } cout << *min_element(dp.begin(), dp.end()) << "\n"; }