#include <bits/stdc++.h>
using namespace std;
const int N = 2222;
int a, m, n, umbrellas[N + 100];
bool start[N];
long long int dp[N + 100][N + 100];
int rain[N + 100];
long long int calc(int idx, int wet) {
  if (start[idx] && (!umbrellas[idx]) && (wet == N)) return 1e9;
  if ((wet == N) && (rain[idx])) return 1e9;
  if (idx == a) return 0;
  if (dp[idx][wet] != -1) return dp[idx][wet];
  long long int ret = umbrellas[wet] + calc(idx + 1, wet);
  ret = min(ret, calc(idx + 1, N));
  int ump = umbrellas[idx];
  if (ump) ret = min(ret, ump + calc(idx + 1, idx));
  return dp[idx][wet] = ret;
}
int main() {
  memset(umbrellas, 0, sizeof(umbrellas));
  memset(dp, -1, sizeof(dp));
  cin >> a >> m >> n;
  while (m--) {
    int from, to;
    cin >> from >> to;
    rain[from + 1] = 1;
    rain[to + 1] = -1;
    start[from] = 1;
  }
  for (int i = 1; i <= a; i++) rain[i] = rain[i] + rain[i - 1];
  while (n--) {
    int location, weight;
    cin >> location >> weight;
    if (umbrellas[location])
      umbrellas[location] = min(umbrellas[location], weight);
    else
      umbrellas[location] = weight;
  }
  long long int ans = calc(0, N);
  cout << ((ans != 1e9) ? ans : -1);
  return 0;
}
