#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 5;
const int inf = 1e18;
int a, m, n;
pair<long long, long long> um[N];
long long dp[N][N], mdp[N][N], rain[N];
int main() {
  cin >> a >> n >> m;
  for (int i = 1; i <= n; i++) {
    int x, y;
    cin >> x >> y;
    for (int j = x; j < y; j++) rain[j] = 1;
  }
  for (int i = 1; i <= m; i++) cin >> um[i].first >> um[i].second;
  sort(um + 1, um + m + 1);
  for (int i = 0; i <= a; i++)
    for (int j = 0; j <= m; j++) {
      if (i == 0) {
        if (j == 0) {
          if (rain[i])
            dp[i][j] = inf;
          else
            dp[i][j] = 0;
        } else if (um[j].first == 0)
          dp[i][j] = um[j].second;
        else
          dp[i][j] = inf;
      } else if (j == 0 && rain[i])
        dp[i][j] = inf;
      else if (j == 0)
        dp[i][j] = mdp[i - 1][m];
      else if (um[j].first > i)
        dp[i][j] = inf;
      else {
        long long x = inf, y = inf;
        x = dp[i - 1][j] + um[j].second;
        if (i == um[j].first) y = mdp[i - 1][j - 1] + um[j].second;
        dp[i][j] = min(x, y);
      }
      if (j == 0)
        mdp[i][j] = dp[i][j];
      else
        mdp[i][j] = min(mdp[i][j - 1], dp[i][j]);
    }
  long long ans = dp[a][0];
  for (int j = 1; j <= m; j++) ans = min(ans, dp[a][j]);
  if (ans == inf)
    cout << -1;
  else
    cout << ans;
}
