Gx, Gy, N, F = map(int, input().split()) xyc = [tuple(map(int, input().split())) for _ in range(N)] dp = [[[10 ** 18 for _ in range(Gy+1)] for _ in range(Gx+1)] for _ in range(N+1)] for i in range(Gx+1): for j in range(Gy+1): if i == 0 and j == 0: dp[0][i][j] = 0 else: dp[0][i][j] = (i + j) * F for i in range(N): xi, yi, ci = xyc[i] for j in range(Gx+1): for k in range(Gy+1): if j == 0 and k == 0: dp[i+1][j][k] = 0 continue dp[i+1][j][k] = min(dp[i+1][j][k], dp[i][j][k]) if j == 0: dp[i+1][j][k] = min(dp[i+1][j][k], dp[i][j][k-1] + F) elif k == 0: dp[i+1][j][k] = min(dp[i+1][j][k], dp[i][j-1][k] + F) else: dp[i+1][j][k] = min(dp[i+1][j][k], dp[i][j-1][k] + F, dp[i][j][k-1] + F) if 0 <= j - xi <= Gx and 0 <= k - yi <= Gy: dp[i+1][j][k] = min(dp[i+1][j][k], dp[i][j-xi][k-yi] + ci) print(dp[N][Gx][Gy])