#include<cstdio>
#include<cstdlib>
const int maxn=300;
const int maxm=10002;
const int inf=maxn*100000;
int c[maxn],id[maxn],d[maxn][maxn];
int ans[maxm],src[maxm],dst[maxm];
int n,m,q,u,v,w,t,i,j;
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
freopen("toll.in","r",stdin);
freopen("toll.out","w",stdout);
scanf("%d%d%d",&n,&m,&q);
for(u=1;u<=n;u++)
{
scanf("%d",&c[u]);
id[u]=u;
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(c[id[i]]>c[id[j]])
{
u=id[i];
id[i]=id[j];
id[j]=u;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
d[i][j]=inf;
}
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&t);
if(d[u][v]>t)
{
d[u][v]=t;
d[v][u]=t;
}
}
for(i=1;i<=q;i++)
{
scanf("%d%d",&u,&v);
src[i]=u;
dst[i]=v;
ans[i]=d[u][v]+max(c[u],c[v]);
}
for(i=1;i<=n;i++)
{
w=id[i];
for(u=1;u<=n;u++)
{
for(v=1;v<=n;v++)
{
if(d[u][v]>d[u][w]+d[w][v])
{
d[u][v]=d[u][w]+d[w][v];
}
}
}
for(j=1;j<=q;j++)
{
u=src[j];
v=dst[j];
t=d[u][v]+max(max(c[u],c[v]),c[w]);
if(ans[j]>t)
ans[j]=t;
}
}
for(i=1;i<=q;i++)
{
printf("%d\n",ans[i]);
}
fclose(stdin);
fclose(stdout);
return 0;
}