#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int N=100008;
queue< pair< int, int > > q;
pair<int,int> p1,p2;
bool door[N];
int key[N];
bool mark[N];
vector<int> graph[N];
bool pushed[N];
int main()
{
bool ans;
bool added;
int i,j,n,m,b,c,d,e,f,k,t;
scanf("%d%d%d",&n,&k,&m);
while(n!=-1 && k!=-1 && m!=-1)
{
while(!q.empty())
q.pop();
for(i=1;i<=n;i++)
graph[i].clear();
for(i=1;i<=n;i++)
{
key[i]=0;
door[i]=false;
mark[i]=false;
}
for(i=1;i<=k;i++)
{
scanf("%d%d",&c,&d);
key[c]=d;
door[d]=true;
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&c,&d);
graph[c].push_back(d);
graph[d].push_back(c);
}
ans=false;
q.push(make_pair(1,0));
while(!q.empty())
{
b=q.front().first;
if(pushed[b]==true)
pushed[b]=false;
c=q.front().second;
if(c>2*m)
break;
if(b==n)
{
ans=true;
break;
}
if(key[b]!=0)
{
door[key[b]]=false;
}
added=true;
for(i=0;i<graph[b].size();i++)
{
d=graph[b][i];
if(mark[d]==false)
{
if(door[d]==false)
{
mark[d]=true;
q.push(make_pair(d,c+1));
}
else
added=false;
}
}
q.pop();
if(added==false && pushed[b]==false)
{
pushed[b]=true;
q.push(make_pair(b,c+1));
}
}
if(ans==true)
printf("Y\n");
else
printf("N\n");
scanf("%d%d%d",&n,&k,&m);
}
return 0;
}