#include <bits/stdc++.h>
using namespace std;
map<int, int> weg;
int dp[2020][2020] = {-1}, n, rain, umb;
bool ran[2020];
int rec(int pos, int last) {
  if (ran[pos] && !last && pos) return 1e9;
  if (pos == n + 1) return 0;
  int &dp = ::dp[pos][last];
  if (dp != -1) return dp;
  dp = rec(pos + 1, 0);
  dp = min(dp, weg[last] + rec(pos + 1, last));
  if (weg[pos + 1]) dp = min(dp, weg[pos + 1] + rec(pos + 1, pos + 1));
  return dp;
}
int main() {
  cin >> n >> rain >> umb;
  memset(dp, -1, sizeof(dp));
  memset(ran, false, sizeof(ran));
  for (int l, r, i = 0; i < rain; i++) {
    scanf("%d%d", &l, &r);
    for (int j = l + 1; j <= r; j++) {
      ran[j] = 1;
    }
  }
  for (int x, w, i = 0; i < umb; i++) {
    scanf("%d%d", &x, &w);
    ++x;
    if (weg[x])
      weg[x] = min(weg[x], w);
    else
      weg[x] = w;
  }
  int ans = rec(0, 0);
  printf("%d", (ans >= 1e9 ? -1 : ans));
}
