#include #define rep(i,a,b) for(int i=int(a);i> GX >> GY >> N >> F; vector X(N),Y(N),C(N); rep(i,0,N){ cin >> X[i] >> Y[i] >> C[i]; } int dp[51][101][101]; rep(i,0,N+1)rep(j,0,GX+1)rep(k,0,GY+1){ dp[i][j][k] = INF; } dp[0][0][0] = 0; rep(i,0,N){ rep(j,0,GX+1)rep(k,0,GY+1){ dp[i+1][j][k] = dp[i][j][k]; if(j < X[i] || k < Y[i])continue; dp[i+1][j][k] = min(dp[i+1][j][k], dp[i][j - X[i]][k - Y[i]] + C[i]); } } int mini = INF; rep(i,0,GX+1)rep(j,0,GY+1){ mini = min(mini, dp[N][i][j] + F * (GX - i + GY - j)); } cout << mini << endl; }