#include <bits/stdc++.h>
using namespace std;
template <class T>
T umax(T a, T b) {
  return (a > b ? a : b);
}
template <class T>
T umin(T a, T b) {
  return (a < b ? a : b);
}
template <class T, class P>
T umax(T a, P b) {
  return (a > b ? a : b);
}
template <class T, class P>
T umin(T a, P b) {
  return (a < b ? a : b);
}
const long long int mod = 1e9 + 7;
int X[] = {0, 1, 0, -1, -1, -1, 1, 1};
int Y[] = {1, 0, -1, 0, -1, 1, -1, 1};
long long int power(long long int a, long long int b) {
  long long int res = 1;
  while (b) {
    if (b & 1) res = (res * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return res;
}
const int maxn = 1e3 + 5;
int main() {
  ios::sync_with_stdio(false);
  int a, n, m;
  cin >> a >> n >> m;
  vector<int> rain(a + 1);
  for (int i = 0; i < n; i++) {
    int l, r;
    cin >> l >> r;
    for (int j = l; j < r; j++) rain[j] = 1;
  }
  vector<int> costs(m);
  vector<pair<int, int> > umbrella(a + 1, make_pair(1e9, -1));
  for (int i = 0; i < m; i++) {
    int pos, cost;
    cin >> pos >> cost;
    costs[i] = cost;
    umbrella[pos] = min(umbrella[pos], make_pair(cost, i));
  }
  vector<vector<int> > dp(a + 1, vector<int>(m + 1, 1e9));
  dp[0][m] = 0;
  for (int i = 0; i < a; i++) {
    for (int j = 0; j <= m; j++) {
      if (dp[i][j] == 1e9) continue;
      if (rain[i] == 0) dp[i + 1][m] = min(dp[i + 1][m], dp[i][j]);
      if (j < m) dp[i + 1][j] = min(dp[i + 1][j], dp[i][j] + costs[j]);
      if (umbrella[i].second != -1)
        dp[i + 1][umbrella[i].second] =
            min(dp[i + 1][umbrella[i].second],
                dp[i][j] + costs[umbrella[i].second]);
    }
  }
  int ans = 1e9;
  for (int i = 0; i <= m; i++) {
    ans = min(ans, dp[a][i]);
  }
  if (ans == 1e9)
    cout << -1 << endl;
  else
    cout << ans << endl;
  return 0;
}
