#include <bits/stdc++.h>
using namespace std;
const int mod = (1e9) + 7;
const double eps = 1e-9;
const int siz = 2e5 + 5, siz2 = 1e5 + 5;
int a, n, m;
bool rainy[2005];
int umb[2005], p[2005];
int dp[2005][2005];
int add(int a, int b) {
  if (max(a, b) == INT_MAX) {
    return INT_MAX;
  }
  return a + b;
}
int solve(int i, int j) {
  if (i == a) {
    return 0;
  }
  if (dp[i][j] != -1) {
    return dp[i][j];
  }
  int ans1 = INT_MAX, ans2 = INT_MAX, ans3 = INT_MAX;
  if (j != 0 || !rainy[i]) {
    ans1 = add(p[j], solve(i + 1, j));
  }
  if (umb[i] != 0) {
    ans2 = add(p[umb[i]], solve(i + 1, umb[i]));
  }
  if (!rainy[i]) {
    ans3 = solve(i + 1, 0);
  }
  return dp[i][j] = min(ans1, min(ans2, ans3));
}
int main() {
  scanf("%d%d%d", &a, &n, &m);
  for (int i = 0; i < n; i++) {
    int l, r;
    scanf("%d%d", &l, &r);
    for (int j = l; j < r; j++) {
      rainy[j] = true;
    }
  }
  for (int i = 1; i <= m; i++) {
    int xi, pi;
    scanf("%d%d", &xi, &pi);
    p[i] = pi;
    if (umb[xi] == 0) {
      umb[xi] = i;
    } else if (p[i] < p[umb[xi]]) {
      umb[xi] = i;
    }
  }
  memset(dp, -1, sizeof dp);
  int ans = solve(0, 0);
  printf("%d\n", ans != INT_MAX ? ans : -1);
  return 0;
}
