#include using namespace std; #define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() typedef long long ll; typedef pair pii; typedef vector vi; #define pb push_back #define mp make_pair int n, m, b; int memo[10000][60]; int p[10000]; int r[10000]; int s[10000]; pii plans[10000][60]; int dp(int day, int blev) { if (day == -1) { if (blev == 0) return 0; else return 1e8; } if (memo[day][blev] != 1e9) return memo[day][blev]; int out = 1e8; for (int i = 0; i <= b; i++) { int rec = dp(day-1, i); int excesspower = i + s[day] - r[day] - blev; // buy power out = min(out, rec - min(0, excesspower) * p[day]); // sell power rep(j, 0, m) { int neededbuy = max(0, plans[day][j].second-excesspower); out = min(out, rec - plans[day][j].first + neededbuy * p[day]); } } return memo[day][blev] = out; } int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); rep(i, 0, 10000) rep(j, 0, 60) memo[i][j] = 1e9; cin >> n >> m >> b; rep(i, 0, n) cin >> p[i] >> r[i] >> s[i]; rep(i, 0, n) rep(j, 0, m) cin >> plans[i][j].first; rep(i, 0, n) rep(j, 0, m) cin >> plans[i][j].second; int out = dp(n-1, 0); rep(blev, 1, b+1) out = min(out, dp(n-1, blev)); cout << out << endl; }