#include <bits/stdc++.h>
using namespace std;
int dp[2004][2004];
int rain[2005];
int umb[2005];
int a, n, m;
int f(int i, int cw) {
  if (dp[i][cw] != -1) return dp[i][cw];
  if (i == a) return dp[i][cw] = 0;
  if (rain[i] > 0 && rain[i + 1] == rain[i]) {
    if (umb[cw] == 0 && umb[i] == 0) return dp[i][cw] = INT_MAX;
    if (umb[cw] == 0 && umb[i] > 0) return dp[i][cw] = umb[i] + f(i + 1, i);
    if (umb[i] == 0 && umb[cw] > 0) return dp[i][cw] = umb[cw] + f(i + 1, cw);
    return dp[i][cw] = min(umb[cw] + f(i + 1, cw), umb[i] + f(i + 1, i));
  }
  if (umb[i] > 0) {
    return dp[i][cw] = min(f(i + 1, 2001),
                           min(umb[i] + f(i + 1, i), umb[cw] + f(i + 1, cw)));
  }
  return dp[i][cw] = min(umb[cw] + f(i + 1, cw), f(i + 1, 2001));
}
int main() {
  cin >> a >> n >> m;
  for (int i = 0; i < n; i++) {
    int t1, t2;
    cin >> t1 >> t2;
    for (int j = t1; j <= t2; j++) {
      rain[j] = i + 1;
    }
  }
  for (int i = 0; i < m; i++) {
    int t1, t2;
    cin >> t1 >> t2;
    if (umb[t1] > 0)
      umb[t1] = min(umb[t1], t2);
    else
      umb[t1] = t2;
  }
  for (int i = 0; i < 2004; i++) {
    for (int j = 0; j < 2004; j++) {
      dp[i][j] = -1;
    }
  }
  int maxp = 1000 * 100 * 2000 + 1000;
  int ans = f(0, 2001);
  if (ans >= maxp)
    cout << "-1";
  else
    cout << f(0, 2001);
}
