// Alex Velea
#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
using namespace std;

#define int64 long long

const int kMaxN = 1e3+5;
const int inf = 0x3f3f3f3f;

bool skipped_day[kMaxN];
int dp[kMaxN];

int main() {
  int d, n, m; cin >> d >> n >> m;
  vector<pair<int, int> > segments;
  for (int i = 0; i < n; i += 1) {
    int x; cin >> x;
    skipped_day[x] = true;
  }

  for (int i = 0; i < m; i += 1) {
    int x, y; cin >> x >> y;
    segments.push_back({x, y});
  }

  sort(segments.begin(), segments.end());

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

  for (auto itr : segments) {
    for (int d = itr.first - 1; d >= 0; d--) {
      if (1 + dp[d] < dp[itr.second]) {
        dp[itr.second] = 1 + dp[d];
      }

      if (skipped_day[d]) {
        break;
      }
    }
  }

  int mn = +inf;
  for (int D = d; D >= 0; D--) {
    if (dp[D] < mn) {
      mn = dp[D];
    }
    if (skipped_day[D]) {
      break;
    }
  }

  cout << mn << '\n';
  return 0;
}