1 #include<bits/stdc++.h>
2 #define rep(i,l,r) for(int i=l;i<=r;++i)
3 using namespace std;
4 typedef long long ll;
5 const int N=20023,inf=4e8;
6 int dis[2][210][N],u,v,w,n,m,K,Q,s[N],head[N],tot,a[N],b[N],c[N],cnt;
7 bool in[N];
8 ll ans,mn;
9 struct zs{
10 int to,next;
11 ll w;
12 }e[N];
13 inline void ins(int u,int v,int w){
14 e[++tot].to=v; e[tot].next=head[u]; head[u]=tot; e[tot].w=w;
15 }
16 inline void spfa(int flag,int num){
17 queue<int>q; q.push(s[num]); dis[flag][num][s[num]]=0; in[s[num]]=1;
18 while(!q.empty()){
19 int x=q.front(); q.pop();
20 for(int k=head[x];k;k=e[k].next) if(dis[flag][num][x]+e[k].w<dis[flag][num][e[k].to]){
21 dis[flag][num][e[k].to]=dis[flag][num][x]+e[k].w;
22 if(!in[e[k].to]){
23 in[e[k].to]=1;
24 q.push(e[k].to);
25 }
26 }
27 in[x]=0;
28 }
29 }
30 int main(){
31 memset(dis,60,sizeof dis);
32 scanf("%d%d%d%d",&n,&m,&K,&Q);
33 rep(i,1,m) scanf("%d%d%d",&a[i],&b[i],&c[i]),ins(a[i],b[i],c[i]);
34 rep(i,1,K) scanf("%d",&s[i]);
35 rep(i,1,K) spfa(0,i);
36 memset(head,0,sizeof head); tot=0;
37 rep(i,1,m) ins(b[i],a[i],c[i]);
38 rep(i,1,K) spfa(1,i);
39 ans=0;
40 while(Q--){
41 scanf("%d%d",&u,&v);
42 mn=inf;
43 rep(i,1,K) mn=min(mn,(ll)(dis[0][i][v]+dis[1][i][u]));
44 if(mn!=inf) ++cnt,ans+=mn;
45 }
46 printf("%d\n%lld\n",cnt,ans);
47 }