#include<stdio.h>
#include<vector>
#include<algorithm> 
#define INT long long
using namespace std;
vector <INT> V[200100];
vector <pair<INT, INT> > VV[200100];
vector <INT > ST;
INT p[200100], s[200100][2], j = 1, c[200100];
INT A[200100], B[200100], cc[200100], ccc[200100];
vector <pair<pair<INT, pair<INT,INT> >, pair<INT, INT> > >AA;
vector <pair<INT, INT> > AAA;
void bfs(INT n){
    INT a, i;
    ST.push_back(1);
    while(ST.size()>0){
        a = ST.back();
        if(ccc[a]==0){
            ccc[a]=1;
            c[a] = j;
            s[j][0]= j;
            j++;
            for(i=V[a].size()-1;i>=0;i--){
                if(ccc[V[a][i]]==0){
                    ST.push_back(V[a][i]);
                    //p[V[a][i]]=a;
                }
            }
        }else{
            ST.pop_back();
            s[c[a]][1] = j;
        }
    }
    return ;
}
INT f(INT n){
    INT ss = 0;
    while(n){
        ss = ss + A[n];
        n = n-(n&(-n));
    }
    return ss;
}
void g(INT n, INT k){
    while(n<200002){
        A[n] = k + A[n];
        n = n+(n&(-n));
    }
    return;
}
INT f1(INT n){
    INT ss = 0;
    while(n){
        ss = ss + B[n];
        n = n-(n&(-n));
    }
    return ss;
}
void g1(INT n, INT k){
    while(n<200002){
        B[n] = k + B[n];
        n = n+(n&(-n));
    }
    return;
}
int main(){
    INT n, m, k, a, b, e, i, b1, c1, d, ee=0, ii;
    scanf("%lld %lld %lld",&n, &m, &k);
    for(i=2;i<=n;i++){
        scanf("%lld %lld",&a, &b);
        p[a]=b;
        V[a].push_back(b);
        V[b].push_back(a);
    }
    bfs(1);
    for(i = 1; i<=n;i++) printf("%lld - > %lld\n", s[c[i]][0],s[c[i]][1]);
    while(m--){
        scanf("%lld %lld %lld %lld", &a, &b, &e, &d);
        if(p[e]==d){
            VV[e].push_back({a,b});
        }else if(p[d]==e){
            VV[d].push_back({a,b});
        }
    }
    for(i=1;i<=n;i++){
        sort(VV[i].begin(),VV[i].end());
        for(j=0;j<VV[i].size();j++){
            if(j==0){
                ee = VV[i][j].second;
                AA.push_back({{VV[i][j].first,{0,0}},{0,i}});
            }else{
                if(ee < VV[i][j].first){
                    AA.push_back({{ee,{2,0}},{0,i}});
                    ee = VV[i][j].second;
                    AA.push_back({{VV[i][j].first,{0,0}},{0,i}});
                }
                if(ee<VV[i][j].second) ee = VV[i][j].second;
            }
        }
        if(j>0) AA.push_back({{ee,{2,0}},{0,i}});
    }
    for(i=1;i<=k;i++){
        scanf("%lld %lld %lld", &a, &b, &e);
        AA.push_back({{a,{1,i}},{b,e}});
    }
    sort(AA.begin(),AA.end());
    for(i=0;i<AA.size();i++){
    	//printf("%lld %lld %lld %lld %lld\n",AA[i].first.first,AA[i].first.second.first,AA[i].first.second.second,AA[i].second.first,AA[i].second.second);
        if(AA[i].first.second.first==0){
            ii = c[AA[i].second.second];
            g(s[ii][0],ii);
            g(s[ii][1],-ii);
            g1(s[ii][0],1);
            g1(s[ii][1],-1);
            printf("0 : %lld %lld %lld\n",AA[i].second.second,s[AA[i].second.second][0],s[AA[i].second.second][1]);
            //printf("0 : %lld %lld %lld %lld %lld %lld %lld\n", AA[i].first.first, AA[i].second.second, ii, f(s[ii][0]),f(s[ii][1]),f1(s[ii][0]),f1(s[ii][1])); 
        }else if(AA[i].first.second.first==1){
            b1 = c[AA[i].second.first];
            c1 = c[AA[i].second.second];
            ii = AA[i].first.second.second;
            //printf("1 : %lld %lld %lld %lld %lld %lld %lld\n",AA[i].first.first, AA[i].second.first, AA[i].second.second, f(b1),f(c1),f1(b1),f1(c1)); 
            if(f(b1)==f(c1) and f1(b1)==f1(c1)) AAA.push_back({ii,1});
            else AAA.push_back({ii,0});;
        }else if(AA[i].first.second.first==2){
            ii = c[AA[i].second.second];
            g(s[ii][0],-ii);
            g(s[ii][1],ii);
            g1(s[ii][0],-1);
            g1(s[ii][1],1);
			//printf("2 : %lld %lld %lld %lld %lld %lld %lld\n",AA[i].first.first, AA[i].second.second, ii, f(s[ii][0]),f(s[ii][1]),f1(s[ii][0]),f1(s[ii][1])); 
        }
    }
    sort(AAA.begin(),AAA.end());
    for(i=0;i<AAA.size();i++){
        if(AAA[i].second==1) printf("YES\n");
        else printf("NO\n");
    }
}
