#include #include #include using namespace std; int calc_score(vector< vector > c, int i, int x, int y, int max_x, int max_y, int score, int F) { if (i == c.size()){ return F * (max_x + max_y - x - y) + score; } else if (c[i][0] + x > max_x || c[i][1] + y > max_y) { return calc_score(c, i+1, x, y, max_x, max_y, score, F); } else { return min(calc_score(c, i+1, x, y, max_x, max_y, score, F), calc_score(c, i+1, x+c[i][0], y+c[i][1], max_x, max_y, score+c[i][2], F)); } } int main(){ int X, Y, N, F, score; vector > crystal; cin >> X >> Y >> N >> F; //for (int i = 0; i < N; ++i) { int x, y, c; while(cin >> x >> y >> c){ if (F * (x + y) <= c) { continue; } vector tmp; tmp.push_back(x); tmp.push_back(y); tmp.push_back(c); crystal.push_back(tmp); } score = calc_score(crystal, 0, 0, 0, X, Y, 0, F); cout << score << endl; return 0; }