#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;
}

				



	
