#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000000;
const int MAX = 2005;
bool rain[MAX] = {0};
int dp[MAX][MAX];
vector<pair<int, int> > v;
bool operator<(pair<int, int> p, pair<int, int> q) { return p.first < q.first; }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  for (int i = 0; i < MAX; i++) {
    for (int j = 0; j < MAX; j++) {
      dp[i][j] = INF;
    }
  }
  int a, n, m;
  cin >> a >> n >> m;
  int l, r;
  for (int i = 1; i <= n; i++) {
    cin >> l >> r;
    for (int j = l + 1; j <= r; j++) {
      rain[j] = 1;
    }
  }
  for (int i = 1; i <= m; i++) {
    cin >> l >> r;
    v.push_back(make_pair(l, r));
  }
  sort(v.begin(), v.end());
  dp[0][0] = 0;
  for (int i = 0; i < v.size(); i++) {
    if (v[i].first == 0) {
      dp[0][i + 1] = 0;
    }
  }
  for (int i = 1; i <= a; i++) {
    int j;
    if (!rain[i]) {
      j = 1;
      dp[i][0] = dp[i - 1][0];
      while (v[j - 1].first < i && j <= v.size()) {
        dp[i][0] = min(dp[i][0], dp[i - 1][j] + v[j - 1].second);
        j++;
      }
    } else if (!rain[i + 1]) {
      j = 1;
      while (v[j - 1].first < i && j <= v.size()) {
        dp[i][0] = min(dp[i][0], dp[i - 1][j] + v[j - 1].second);
        j++;
      }
    }
    j = 1;
    while (v[j - 1].first < i && j <= v.size()) {
      dp[i][j] = dp[i - 1][j] + v[j - 1].second;
      j++;
    }
    if (v[j - 1].first == i && j <= v.size()) {
      if (!rain[i]) dp[i][j] = dp[i - 1][0];
      for (int k = 1; k < j; k++) {
        dp[i][j] = min(dp[i - 1][k] + v[k - 1].second, dp[i][j]);
      }
    }
  }
  int ans = INF;
  for (int i = 0; i <= m; i++) {
    ans = min(dp[a][i], ans);
  }
  if (ans >= INF) {
    cout << "-1\n";
  } else {
    cout << ans << "\n";
  }
  return 0;
}
