import java.util.Scanner;
//这道题的思路其实很简单,将每一个时间间隔看成一个背包,然后对这个小背包使用多重背包算法求解
//其中处理的需要注意的地方就是时间间隔的计算
public class Main {
public static int n;
public static long packageItems(int[] W, int[] V, int category) {
if (category==0) return 0;
long[] dp = new long[category + 1];
dp[0] = 0;
for (int i = 1; i < W.length+1; i++) {
for (int j = W[i-1]; j <=category; j++) {
dp[j] = Math.max(dp[j], dp[j - W[i-1]] + V[i-1]);
}
}
return dp[category];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
int m = sc.nextInt();
int q = sc.nextInt();
int[] categories= new int[q+1];
int []arr1=new int[q+2];
arr1[q+1]=n+1;
for(int i=1;i<q+1;i++){
arr1[i]=sc.nextInt();
}
for(int i=0;i<categories.length;i++){
categories[i]=arr1[i+1]-arr1[i]-1;
}
int[] W = new int[m];
int[] V = new int[m];
for (int i = 0; i < m; i++) {
int ki = sc.nextInt();
int si = sc.nextInt();
W[i] = (int) Math.pow(2, ki);
V[i] = si;
}
long sum = 0;
for (int category : categories) {
sum += packageItems(W, V, category);
}
System.out.println(sum);
sc.close();
}
}