#include using namespace std; #define MAXD 1005 #define INF 1000000000 int D, N, M; vector 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; }