Adilbek's house is located on a street which can be represented as the OX axis. This street is really dark, so Adilbek wants to install some post lamps to illuminate it. Street has n positions to install lamps, they correspond to the integer numbers from 0 to n - 1 on the OX axis. However, some positions are blocked and no post lamp can be placed there.

There are post lamps of different types which differ only by their power. When placed in position x, post lamp of power l illuminates the segment [x; x + l]. The power of each post lamp is always a positive integer number.

The post lamp shop provides an infinite amount of lamps of each type from power 1 to power k. Though each customer is only allowed to order post lamps of exactly one type. Post lamps of power l cost a_l each.

What is the minimal total cost of the post lamps of exactly one type Adilbek can buy to illuminate the entire segment [0; n] of the street? If some lamps illuminate any other segment of the street, Adilbek does not care, so, for example, he may place a lamp of power 3 in position n - 1 (even though its illumination zone doesn't completely belong to segment [0; n]).

Input

The first line contains three integer numbers n, m and k (1 ≤ k ≤ n ≤ 10^6, 0 ≤ m ≤ n) — the length of the segment of the street Adilbek wants to illuminate, the number of the blocked positions and the maximum power of the post lamp available.

The second line contains m integer numbers s_1, s_2, ..., s_m (0 ≤ s_1 < s_2 < ... s_m < n) — the blocked positions.

The third line contains k integer numbers a_1, a_2, ..., a_k (1 ≤ a_i ≤ 10^6) — the costs of the post lamps.

Output

Print the minimal total cost of the post lamps of exactly one type Adilbek can buy to illuminate the entire segment [0; n] of the street.

If illumintaing the entire segment [0; n] is impossible, print -1.

Examples

Input

6 2 3
1 3
1 2 3


Output

6


Input

4 3 4
1 2 3
1 10 100 1000


Output

1000


Input

5 1 5
0
3 3 3 3 3


Output

-1


Input

7 4 3
2 4 5 6
3 14 15


Output

-1
import java.io.*;
import java.math.BigInteger;
import java.util.*;

import javax.rmi.CORBA.Util;
import javax.swing.text.Utilities;



public class Main {

	public static void main(String[] args) throws IOException {
		InputStream inputStream = System.in;		
		OutputStream outputStream = System.out;		
		PrintWriter out = new PrintWriter(outputStream);
		InputReader in = new InputReader(inputStream);
		//InputStream uinputStream = new FileInputStream("hayfeast.in");
		//InputReader in = new InputReader(uinputStream);
		//PrintWriter uout = new PrintWriter(new BufferedWriter(new FileWriter("hayfeast.out")));

		Task t = new Task();
		t.solve(in, out);
		out.close();
	}
	
	static class ListNode {
		 int val;
		 ListNode next;
		 ListNode(int x) { val = x; }
	}		

	static class Task {		
		public void solve(InputReader in, PrintWriter out) throws IOException {
			long tStart = System.currentTimeMillis();
			int n = in.nextInt();
			int m = in.nextInt();
			int k = in.nextInt();
			int hole[] = new int[n+1];
			for(int i=0;i<m;i++) hole[in.nextInt()] = 1;
			int lst[] = new int[n];
			for(int i=0;i<n;i++){
				if(hole[i]==0) lst[i]=i;
				else if(i>0){
					lst[i] = lst[i-1];
				}else{
					lst[i]=-1;
				}
			}
			
			int price[] = new int[1000001];
			for(int i=1;i<=k;i++){
				price[in.nextInt()] = i;
			}			
			ArrayList<pair> q = new ArrayList<pair>();
			for(int i=1;i<1000001;i++){
				if(price[i]!=0)
					q.add(new pair(price[i],i));
			}
			long min = Long.MAX_VALUE;
			for(pair t:q){
				long cost = is_ok(hole,lst,n,t);
				if(cost!=-1&&cost<min) min = cost;
			}
			out.println(min==Long.MAX_VALUE?-1:min);			
		}
		class pair{
			int len, price;
			public pair(int a, int b){
				len=a;price=b;
			}		
		}
		long is_ok(int[] hole, int[] lst, int end, pair t){
			int c=0; int prev = -1; int cur=0;		
			while(cur<end){
				if(lst[cur]<=prev) return -1;
				prev = lst[cur];
				cur = prev+t.len;
				c++;
			}
			return (long)c*t.price;
		}
	}

	// default class
	static class InputReader {
		public BufferedReader re;
		public StringTokenizer st;

		public InputReader(InputStream input) {
			re = new BufferedReader(new InputStreamReader(input));
			st = null;
		}

		public String next() {
			while (st == null || !st.hasMoreTokens()) {
				try {
					st = new StringTokenizer(re.readLine());
				} catch (IOException e) {
					throw new RuntimeException(e);
				}

			}
			return st.nextToken();
		}

		public String nextLine() {
			String tmp = null;
			try {
				tmp = re.readLine();
			} catch (IOException e) {
				throw new RuntimeException(e);
			}
			return tmp;
		}

		public boolean hasNext() {
			String tmp;
			if (st != null && st.hasMoreTokens())
				return true;
			else {
				try {
					tmp = re.readLine();
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				if (tmp != null) {
					st = new StringTokenizer(tmp);
					return true;
				} else {
					return false;
				}
			}

		}

		public int nextInt() {
			return Integer.parseInt(next());
		}

		public double nextDouble() {
			return Double.parseDouble(next());
		}

		public long nextLong() {
			return Long.parseLong(next());
		}
	}

	static class Dumper {
		static void print_int_arr(int[] arr) {
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
			System.out.println("---------------------");
		}
		
		static void print_char_arr(char[] arr) {
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
			System.out.println("---------------------");
		}		

		static void print_double_arr(double[] arr) {
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
			System.out.println("---------------------");
		}

		static void print_2d_arr(int[][] arr, int x, int y) {
			for (int i = 0; i < x; i++) {
				for (int j = 0; j < y; j++) {
					System.out.print(arr[i][j] + " ");
				}
				System.out.println();
			}
			System.out.println();
			System.out.println("---------------------");
		}

		static void print_2d_arr(boolean[][] arr, int x, int y) {
			for (int i = 0; i < x; i++) {
				for (int j = 0; j < y; j++) {
					System.out.print(arr[i][j] + " ");
				}
				System.out.println();
			}
			System.out.println();
			System.out.println("---------------------");
		}

		static void print(Object o) {
			System.out.println(o.toString());
		}

		static void getc() {
			System.out.println("here");
		}
		
		static void print_listnode(ListNode x){
			while(x!=null){
				System.out.print(x.val+" ");
				x=x.next;
			}
			System.out.println();
		}
	}
}