#include <bits/stdc++.h>
using namespace std;
long long rain[3000];
pair<long long, long long> umb[3000];
long long dp[3000][3000];
int main() {
  ifstream fin("input.txt", ios::in);
  ios_base::sync_with_stdio(false);
  cout << setprecision(10);
  for (long long i = 0; i < 3000; i++) {
    umb[i].first = 2000000000ll;
  }
  for (long long i = 0; i < 3000; i++) {
    for (long long j = 0; j < 3000; j++) {
      dp[i][j] = 2000000000ll;
    }
  }
  long long a, n, m;
  cin >> a >> n >> m;
  while (n--) {
    long long c, d;
    cin >> c >> d;
    for (long long i = c + 1; i <= d; i++) rain[i] = 1;
  }
  long long cost[m + 1];
  for (long long i = 0; i < m; i++) {
    long long c, d;
    cin >> c >> d;
    cost[i + 1] = d;
    if (umb[c].first > d) {
      umb[c].first = d;
      umb[c].second = i + 1;
    }
  }
  dp[0][0] = 0;
  if (umb[0].first < 2000000000ll) dp[0][umb[0].second] = 0;
  for (long long i = 1; i <= a; i++) {
    for (long long j = 0; j <= m; j++) {
      if (j > 0) dp[i][j] = min(dp[i - 1][j] + cost[j], dp[i][j]);
      if (rain[i] == 0) {
        dp[i][0] = min(dp[i][0], dp[i - 1][j]);
      }
      if (umb[i - 1].first < 2000000000ll) {
        dp[i][umb[i - 1].second] =
            min(dp[i][umb[i - 1].second], (dp[i - 1][j] + umb[i - 1].first));
      }
    }
  }
  long long ans = 2000000000ll;
  for (long long i = 0; i <= m; i++) {
    ans = min(ans, dp[a][i]);
  }
  if (ans == 2000000000ll)
    cout << -1;
  else
    cout << ans;
}
