#include<bits/stdc++.h>
using namespace std;
#define N 10010
int tt,head[N],cnt[N],type[N],ver[N];
double edge[N];
int nxt[N],d[N],n,m,tot,s,t;
queue<int>q;
bool v[114514];
void add(int x,int y,double z,int tp){
ver[++tot]=y,edge[tot]=z,type[tot]=tp,nxt[tot]=head[x],head[x]=tot;
}
bool isfh;
bool spfa(double X){
for(int i=0;i<=n;i++){
d[i]=INT_MIN;
cnt[i]=0;
v[i]=0;
}
d[n+1]=0;
q.push(n+1);
v[n+1]=1;
while(q.size()){
int x=q.front();
q.pop();
v[x]=0;
for(int i=head[x];i;i=nxt[i]){
int y=ver[i];double z=edge[i];
if(type[i]==1) z=log2(edge[i]-X);
if(type[i]==2) z=-log2(edge[i]+X);
if(d[y]>d[x]+z){
d[y]=d[x]+z;
cnt[y]=cnt[x]+1;
if(cnt[y]>=n+2) return 1;
else if(!v[y]) q.push(y),v[y]=1;
}
}
}
return 0;
}
int main(){
double l=0,r=10,ans;
cin>>n>>s>>t;tt=n+1;
for(int i=0;i<=n;i++) add(n+1,i,0,114514);
while(s--){
int x,op,a,b;
cin>>op>>a>>b>>x;
add(b,a,x,op);
if(op==1)r=min(r,(double)x);
}
while(t--){
int c,x;
cin>>c>>x;
add(0,c,log2(x),114514);
add(c,0,-log2(x),114514);
}
if(!spfa(0)) cout<<-1;
else{
while(r-l>0.00000001){
double mid=(l+r)/2.0;
if(spfa(mid))ans=mid,l=mid+0.00000001;
else r=mid-0.00000001;
}
printf("%.6lf",ans);
}
}
神秘码风