#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

const int maxn=41000;
const int maxm=110000;

typedef struct{
  int p,q,kv;
} grana;

int kuca1[maxm],kuca2[maxm],sat[maxm],poc[maxn],ozn[maxn];
grana pov[2*maxm];
int n,m,k;

int upG(const void *px,const void *py)
{
    grana *x=(grana *)px;   
    grana *y=(grana *)py;
    if ((x->p)>(y->p)) return 1;
    if ((x->p)<(y->p)) return -1;
    if ((x->kv)<(y->kv)) return 1;
    if ((x->kv)>(y->kv)) return -1;
    if ((x->q)>(y->q)) return 1;
    if ((x->q)<(y->q)) return -1;
    return 0;
}
int upI(const void *px,const void *py)
{
    int *x=(int *)px;   
    int *y=(int *)py;
    if (*x>*y) return 1;
    if (*x<*y) return -1;
    return 0;
}

void dfs(int i,int b,int s)
{
    ozn[i]=b;
    int j;
    for(j=poc[i];(j<poc[i+1]) && (pov[j].kv>s);j++)
       if (!ozn[pov[j].q])
          dfs(pov[j].q,b,s);
    return;      
}



int moze(int s)
{
    memset(ozn,0,sizeof(ozn));
    int i,j=1;
    for(i=0;i<n;i++)
       if (!ozn[i])
          {dfs(i,j,s);j++;}
       
    int ind=1;
    for(i=0;(i<k)&&ind;i++)
       ind=(ozn[kuca1[i]]!=ozn[kuca2[i]]);
    return ind;           
}

int main()
{
    freopen("struja.in","r",stdin);
    freopen("struja.out","w",stdout);

    int i,j,l,d,s;

    scanf("%d%d%d",&n,&m,&k);
    for(i=0;i<m;i++)
    {
       scanf("%d%d%d",&(pov[2*i].p),&(pov[2*i].q),&(pov[2*i].kv));             
       pov[2*i].p--;pov[2*i].q--;
       pov[2*i+1].p=pov[2*i].q;
       pov[2*i+1].q=pov[2*i].p;
       pov[2*i+1].kv=pov[2*i].kv;
       sat[i+1]=pov[2*i].kv;
    }
    for(i=0;i<k;i++)
    {
       scanf("%d%d",&(kuca1[i]),&(kuca2[i]));
       kuca1[i]--;kuca2[i]--;
    }
       
    qsort(pov,2*m,sizeof(grana),upG);
    for(i=j=0;i<=n;i++)
    {
        while ((pov[j].p<i) && (j<2*m)) j++;             
        poc[i]=j;
    }
    
    sat[0]=0;
    qsort(sat,m+1,sizeof(int),upI);    
    for(i=1,j=0;i<=m;i++)
    {
       if (sat[j]!=sat[i])
       {
          j++;
          sat[j]=sat[i];
       }     
    }
    
    l=0;d=j;    
    while (d-l>1)
    {
          s=(l+d)/2;
          if (moze(sat[s]))
             d=s;
          else
             l=s;          
    }            
    if (moze(sat[l]))   
       d=l;
    
    printf("%d\n",sat[d]);
    
	return 0;
}
