#include <bits/stdc++.h>

using namespace std;

#define MAXD 1005
#define INF 1000000000

int D, N, M;
vector<int> A[MAXD];
bool sick[MAXD];
int dp[MAXD];

int main() {
	// assert(freopen("lumber_leaves.in", "r", stdin));
	// assert(freopen("lumber_leaves.out", "w", stdout));
	cin.sync_with_stdio(false);

	cin >> D >> N >> M;
	for (int i = 0; i < N; i++) {
		int x;
		cin >> x;
		sick[x] = true;
	}
	for (int i = 0; i < M; i++) {
		int x, y;
		cin >> x >> y;
		A[x].push_back(y);
	}

	fill(dp, dp + D + 2, INF);
	dp[1] = 0;
	for (int d = 1; d <= D; d++) {
		if (dp[d] != INF) {
			for (auto s : A[d]) {
				dp[s + 1] = min(dp[s + 1], dp[d] + 1);
			}
			if (!sick[d]) {
				dp[d + 1] = min(dp[d + 1], dp[d]);
			}
		}
	}

	cout << dp[D + 1] << endl;

	return 0;
}