using System; using System.Collections.Generic; using System.Linq; class Program { const int inf = 1145141919; static int gx, gy, n, f; static int[] cx, cy, c; static T Min(T x, T y) where T : IComparable { return x.CompareTo(y) < 0 ? x : y; } static int Search(int x, int y, int sum, List cs) { if (x == gx && y == gy) return sum; if (x > gx || y > gy) return inf; int min = inf; min = Min(min, Search(x + 1, y, sum + f, cs)); min = Min(min, Search(x, y + 1, sum + f, cs)); for (var i = 0; i < n; i++) { if (cs.Contains(i)) { var cs2 = new List(cs); cs2.Remove(i); min = Min(min, Search(x + cx[i], y + cy[i], sum + c[i], cs2)); } } return min; } static void Main() { { var tmp = Console.ReadLine().Split().Select(int.Parse).ToArray(); gx = tmp[0]; gy = tmp[1]; n = tmp[2]; f = tmp[3]; cx = new int[n]; cy = new int[n]; c = new int[n]; } for (var i = 0; i < n; i++) { var tmp = Console.ReadLine().Split().Select(int.Parse).ToArray(); cx[i] = tmp[0]; cy[i] = tmp[1]; c[i] = tmp[2]; } var cs = new List(n); for (var i = 0; i < n; i++) cs.Add(i); var ans = Search(0, 0, 0, cs); Console.WriteLine(ans); } }