1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #include <vector>
5 using namespace std;
6 const int N=200010,K=500010;
7 typedef long long LL;
8 LL sum;
9 int n,m,k,w[N],fa[N<<1],bin[25];
10 int e,adj[N<<1],cnt,f[N<<1][19],deep[N<<1];
11 int find(int a){return fa[a]==a?a:fa[a]=find(fa[a]);}
12 inline int min(int a,int b){return a<b?a:b;}
13 struct data{int a,b;data(int x=0,int y=0){a=x,b=y;}}step[N];
14 struct edge{int zhong,next;}s[N<<1];
15 vector<data>re[N<<1];
16 inline void add(int qi,int zhong)
17 {s[++e].zhong=zhong;s[e].next=adj[qi];adj[qi]=e;}
18 void dfs(int rt)
19 {
20 deep[rt]=deep[f[rt][0]]+1;
21 for(int i=adj[rt];i;i=s[i].next)
22 dfs(s[i].zhong);
23 }
24 inline void ST()
25 {
26 for(int i=1;i<=18;i++)
27 for(int j=1;j<=cnt;j++)
28 f[j][i]=f[f[j][i-1]][i-1];
29 }
30 inline int LCA(int a,int b)
31 {
32 if(deep[a]<deep[b])swap(a,b);
33 int cha=deep[a]-deep[b];
34 for(int j=18;~j;j--)
35 if(cha&bin[j])a=f[a][j];
36 if(a==b)return a;
37 for(int j=18;~j;j--)
38 if(f[a][j]!=f[b][j])a=f[a][j],b=f[b][j];
39 return f[a][0];
40 }
41 int main()
42 {
43 bin[0]=1;for(int i=1;i<=20;i++)bin[i]=bin[i-1]<<1;
44 int a,b,lca;scanf("%d%d%d",&n,&m,&k);cnt=n;
45 for(int i=1;i<=n+m;i++)fa[i]=i;
46 for(int i=1;i<=n;i++)scanf("%d",&w[i]);
47 for(int i=1;i<=m;i++)
48 scanf("%d%d",&step[i].a,&step[i].b),
49 a=find(step[i].a),b=find(step[i].b),
50 fa[a]=fa[b]=f[a][0]=f[b][0]=++cnt,
51 add(cnt,a),add(cnt,b);
52 ST();
53 for(int i=1;i<=cnt;i++)
54 if(!deep[i])dfs(find(i));
55 for(int i=1;i<=k;i++)
56 {
57 scanf("%d%d",&a,&b);
58 if(find(a)==find(b))
59 lca=LCA(a,b),re[lca].push_back(data(a,b));
60 }
61 for(int i=n+1;i<=cnt;i++)
62 for(int j=0,len=re[i].size();j<len;j++)
63 a=min(w[re[i][j].a],w[re[i][j].b]),
64 w[re[i][j].a]-=a,w[re[i][j].b]-=a,sum+=a;
65 printf("%lld\n",sum<<1);
66 }