#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>16|a[i]<<48; } } 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); } 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); } 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); }