#include<bits/stdc++.h>
using namespace std;
#define ll long long

struct P
{
    int x,y,z;
};

int a,b,c,sg[333333];
int dx[10]={1,0,-1,0},dy[11]={0,1,0,-1};
ll x,y,z;
const ll mod=1000000007;
int fl[333333],ans[111111];
vector<int> tr[101111],v[101111];
vector<P> s[101111],q[101111];
int hld[101111],chn[101111],w[101111],pr[111111],nn,l[111111];

void mk_hld(int n,int c)
{
    stack<P> s;
    s.push({n,c});

    for(;s.size();)
    if(!hld[s.top().x])
    {
        int n=s.top().x,c=s.top().y;
        s.pop();
        nn++;
        hld[n]=nn;
        chn[n]=c;
        if(tr[n].size())
        {
            for(int h=tr[n].size()-1;h>0;h--)
            s.push({tr[n][h],tr[n][h]});

            s.push({tr[n][0],c});
        }
    }
    else
    {
        ;
    }
}
void init(int n,int p)
{
    stack<int> s;
    s.push(n);
    l[1]=1;
    for(;s.size();)
    {
        int n=s.top();
        if(w[n]==0)
        {
            w[n]=1;
            for(int h=0;h<v[n].size();h++)
            if(w[v[n][h]]==0)
            {
                l[v[n][h]]=l[n]+1;
                tr[n].push_back(v[n][h]);
                pr[v[n][h]]=n;
                s.push(v[n][h]);
            }
        }

        else
        {
            for(int h=0;h<tr[n].size();h++)
                w[n]+=w[tr[n][h]];
            s.pop();
        }
    }
}

void up(int i,int n,int m)
{
    if(n==m||!fl[i]) return;
    if(sg[i*2]<sg[i]) fl[i*2]=1,sg[i*2]=max(sg[i],sg[i*2]);
    if(sg[i*2+1]<sg[i]) fl[i*2+1]=1,sg[i*2+1]=max(sg[i],sg[i*2+1]);
    fl[i]=0;
}

void go(int i,int n,int m,int c,int d,int k)
{
    if(m<c||n>d) return;
    //printf("+++%d %d %d\n",c,d,k);
    up(i,n,m);
    if(c<=n&&m<=d)
    {
        if(k>sg[i]) fl[i]=1;
        sg[i]=max(sg[i],k);
        //printf("%d %d %d\n",n,m,sg[i]);
        return;
    }
    go(i*2,n,(n+m)/2,c,d,k);
    go(i*2+1,(n+m)/2+1,m,c,d,k);
    sg[i]=max(max(sg[i*2],sg[i*2+1]),sg[i]);
}

int get(int i,int n,int m,int c,int d)
{
    if(m<c||n>d) return 0;
    up(i,n,m);
    if(c<=n&&m<=d)
    {
        //printf("#%d\n",sg[i]);
        return sg[i];
    }
    return max(get(i*2,n,(n+m)/2,c,d),get(i*2+1,(n+m)/2+1,m,c,d));
}

int lcp(int n,int m)
{
    for(;chn[n]!=chn[m];)
    {
        if(hld[n]>hld[m]) n=pr[chn[n]];
        else m=pr[chn[m]];
        //printf("!%d %d\n",n,m);
    }
    if(l[n]>l[m]) return m;
    return n;
}


void f(int n,int m,int c)
{
    //printf("@%d %d\n",n,m);
    if(l[n]<=l[m]) return;

    if(chn[n]==chn[m])
    {

        go(1,1,100000,hld[m]+1,hld[n],c);
        return;
    }

    go(1,1,100000,hld[chn[n]],hld[n],c);
    f(pr[chn[n]],m,c);
}


int g(int n,int m)
{
    if(l[n]<=l[m]) return 0;
    //printf("**%d %d %d\n",hld[n],hld[m],chn[n]);
    if(chn[n]==chn[m])
    {
        //printf("#%d %d %d %d\n",n,m,hld[n],hld[m]);
        return get(1,1,100000,hld[m]+1,hld[n]);
    }
    //printf("&&%d\n",get(1,1,100000,hld[chn[n]],hld[n]));
    return max(get(1,1,100000,hld[chn[n]],hld[n]),g(pr[chn[n]],m));
}

int main()
{
    scanf("%d %d %d",&a,&b,&c);
    //printf("%d@%d@%d",a,b,c);
    for(int t=1;t<a;t++)
    {
        int n,m;
        scanf("%d %d",&n,&m);
        v[n].push_back(m);
        v[m].push_back(n);
    }
    init(1,0);
    mk_hld(1,1);
    for(int t=1;t<=b;t++)
    {
        int n,m,ss,e;
        scanf("%d %d %d %d",&ss,&e,&n,&m);
        s[ss].push_back({n,m,e});
    }
    for(int t=1;t<=c;t++)
    {
        int n,m,k;
        scanf("%d %d %d",&k,&n,&m);
        q[k].push_back({n,m,t});
    }
    for(int t=1;t<=100000;t++)
    {
        for(P h:s[t])
        {
            int p=lcp(h.x,h.y);
            //printf("%d %d %d %d\n",h.x,h.y,p,h.z);
            f(h.x,p,h.z);
            f(h.y,p,h.z);
        }
        for(P h:q[t])
        {
            int p=lcp(h.x,h.y);
            //printf("!!!!!!!!!!!!!!!!!%d %d\n",h.z,p);
           // printf("%d %d\n",h.z,max(g(h.x,p),g(h.y,p)));
            if(max(g(h.x,p),g(h.y,p))<t) ans[h.z]=1;
        }
    }
    for(int t=3;t<=8;t++)
    {
        if(!ans[t]) goto asd;
    }
    //ans[9]=1;
    //printf("%d#%d#%d",a,b,c);
    asd:;
    for(int t=1;t<=c;t++)
        if(ans[t]) puts("YES");
        else puts("NO");
}
