#include <bits/stdc++.h>
using namespace std;
const int N = 2000 + 5;
const int INF = 1e9;
int n, m, a, l[N], r[N], x, p[N], umb[N], dp[N][N];
bool rain[N];
int OPT(int i, int j) {
  if (i == a) {
    if (j < INF)
      return 0;
    else
      return INF;
  }
  if (dp[i][j] != -1) return dp[i][j];
  int ans = INF, x = INF, y = INF, z = INF;
  if (rain[i]) {
    if (j == 0 && umb[i] == 0) return INF;
    x = (j != 0) ? OPT(i + 1, j) + p[j] : INF;
    y = (umb[i]) ? (OPT(i + 1, umb[i]) + p[umb[i]]) : INF;
    z = INF;
  } else {
    x = OPT(i + 1, j) + p[j];
    y = (umb[i]) ? (OPT(i + 1, umb[i]) + p[umb[i]]) : INF;
    z = OPT(i + 1, 0) + 0;
  }
  ans = min(min(x, y), z);
  return dp[i][j] = ans;
}
int main() {
  memset(dp, -1, sizeof(dp));
  cin >> a >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> l[i] >> r[i];
    for (int j = l[i]; j < r[i]; j++) {
      rain[j] = 1;
    }
  }
  for (int i = 1; i <= m; i++) {
    cin >> x >> p[i];
    if (umb[x] != 0) {
      if (p[umb[x]] > p[i]) {
        umb[x] = i;
      }
    } else
      umb[x] = i;
  }
  int ans = OPT(0, 0);
  if (ans >= INF)
    cout << -1 << endl;
  else
    cout << ans << endl;
  return 0;
}
