#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")

char*mmap();
#define rd_skip() while(*rp++>=48)
#define rd(v) long v=0;{long _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;}
#define wt(v) {long _z=v;do*--wp=_z%10+48;while(_z/=10);}
#define rep(v,e) for(long v=0;v<e;++v)

void radix_sort_aux(unsigned long*a,unsigned long*b,int n){
	int c[256];
	for(int i=0;i<256;++i){
		c[i]=0;
	}
	for(int i=0;i<n;++i){
		++c[a[i]&255];
	}
	int t=0;
	for(int i=256;i--;){
		int u=c[i];
		c[i]=t;
		t+=u;
	}
	for(int i=0;i<n;++i){
		b[c[a[i]&255]++]=a[i]>>8|a[i]<<56;
	}
}

void radix_sort_32(unsigned long*a,int n){
	unsigned long*b=a+n;
	radix_sort_aux(a,b,n);
	radix_sort_aux(b,a,n);
	radix_sort_aux(a,b,n);
	radix_sort_aux(b,a,n);
}

void radix_sort(unsigned long*a,int n){
	unsigned*b=a+n;
	radix_sort_aux(a,b,n);
	radix_sort_aux(b,a,n);
	radix_sort_aux(a,b,n);
	radix_sort_aux(b,a,n);
	radix_sort_aux(a,b,n);
	radix_sort_aux(b,a,n);
	radix_sort_aux(a,b,n);
	radix_sort_aux(b,a,n);
}

unsigned long ab[400000];
char u[200001];

main(){
	char*rp=mmap(0l,1l<<25,1,2,0,0ll);
	rd(n);
	rd_skip();
	rd(x);
	rep(i,n){
		rd(a);
		rd(b);
		ab[i]=a|b<<32;
	}
	radix_sort_32(ab,n);
	rep(i,n){
		long a=ab[i]>>32;
		long b=(unsigned)ab[i];
		if(!u[b]){
			u[b]=1;
			a+=x;
		}
		ab[i]=a;
	}
	radix_sort(ab,n);
	{
		long s=0;
		rep(i,n){
			long t=s+ab[i];
			ab[i]=s;
			s=t;
		}
		ab[n]=s;
	}
	{
		rd(k);
		long z=0;
		rep(i,k){
			rd(c);
			z+=ab[c];
		}
		char wbuf[64],*wp=wbuf+sizeof wbuf;
		wt(z);
		write(1,wp,wbuf+sizeof wbuf-wp);
	}
	_exit(0);
}