/*
*/

//#pragma comment(linker, "/STACK:16777216")
#define _CRT_SECURE_NO_WARNINGS

#include <fstream>
#include <iostream>
#include <string>
#include <complex>
#include <math.h>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <stdio.h>
#include <stack>
#include <algorithm>
#include <list>
#include <ctime>
#include <memory.h>
#include <assert.h>

#define y0 sdkfaslhagaklsldk
#define y1 aasdfasdfasdf
#define yn askfhwqriuperikldjk
#define j1 assdgsdgasghsf
#define tm sdfjahlfasfh
#define lr asgasgash
#define norm asdfasdgasdgsd

#define eps 1e-9
#define M_PI 3.141592653589793
#define bs 1000000007
#define bsize 512

const int SZ = 10000;

using namespace std;

int D, N, M;
vector<int> v[SZ];
int dp[SZ];
int skip[SZ];

int main(){
	//freopen("route.in","r",stdin);
	//freopen("route.out","w",stdout);
	//freopen("F:/in.txt", "r", stdin);
	//freopen("F:/output.txt", "w", stdout);
	ios_base::sync_with_stdio(0);
	//cin.tie(0);
	
	cin >> D >> N >> M;

	for (int i = 1; i <= N; i++)
	{
		int val;
		cin >> val;
		skip[val] = 1;
	}

	for (int i = 1; i <= D; i++)
	{
		skip[i] += skip[i - 1];
	}

	for (int i = 1; i <= M; i++)
	{
		int a, b;
		cin >> a >> b;
		//if (skip[b] - skip[a - 1] == b - a)
		//{
			v[a].push_back(b);
		//}
	}

	for (int i = 0; i <= D; i++)
	{
		dp[i] = 1e9;
	}

	dp[0] = 0;

	for (int i = 0; i <= D; i++)
	{
		if (skip[i + 1] == skip[i])
			dp[i + 1] = min(dp[i + 1], dp[i]);
		for (int j = 0; j < v[i + 1].size(); j++)
		{
			int to = v[i + 1][j];
			dp[to] = min(dp[to], dp[i] + 1);
		}
	}

	cout << dp[D] << endl;

	cin.get(); cin.get();
	return 0;
}