using System; using System.Linq; namespace No001_道のショートカット { class Program { static int n; static int c; static int v; static int m_mon; static int m_tim; static int[] s; static int[] t; static int[] y; static int[] m; static void Main(string[] args) { n = int.Parse(Console.ReadLine()); c = int.Parse(Console.ReadLine()); v = int.Parse(Console.ReadLine()); string[] in_s = Console.ReadLine().Split(' '); s = in_s.Select(int.Parse).ToArray(); string[] in_t = Console.ReadLine().Split(' '); t = in_t.Select(int.Parse).ToArray(); string[] in_y = Console.ReadLine().Split(' '); y = in_y.Select(int.Parse).ToArray(); string[] in_m = Console.ReadLine().Split(' '); m = in_m.Select(int.Parse).ToArray(); Sort(); m_mon = 0; m_tim = 0; Check(1, 0, 0); if (m_tim == 0) Console.WriteLine(-1); else Console.WriteLine(m_tim); } static void Sort() { for (int i = 0; i < v - 1; i++) for (int j = i; j < v; j++) if (s[i] > s[j]) Swap(i, j); } static void Swap(int a, int b) { int temp = s[a]; s[a] = s[b]; s[b] = temp; temp = t[a]; t[a] = t[b]; t[b] = temp; temp = y[a]; y[a] = y[b]; y[b] = temp; temp = m[a]; m[a] = m[b]; m[b] = temp; } static void Check(int level, int money, int time) { if (money > c) return; if (time > m_tim && m_tim != 0) return; if (level == n) { m_mon = money; m_tim = time; } else for (int i = 0; i < v; i++) if (s[i] == level) Check(t[i], money + y[i], time + m[i]); else if (s[i] > level) break; } } }