#include <bits/stdc++.h>
using namespace std;
signed main() {
  int64_t a, n, m;
  cin >> a >> n >> m;
  vector<pair<int64_t, int64_t>> otr(n);
  for (int64_t i = 0; i < n; ++i) {
    cin >> otr[i].first >> otr[i].second;
  }
  vector<pair<int64_t, int64_t>> z(m);
  for (int64_t i = 0; i < m; ++i) {
    cin >> z[i].first >> z[i].second;
  }
  vector<int64_t> rn(a + 2);
  for (auto el : otr) {
    rn[el.first]++;
    rn[el.second]--;
  }
  for (int64_t i = 1; i < a + 2; ++i) {
    rn[i] += rn[i - 1];
  }
  vector<pair<int64_t, int64_t>> chz(a + 1, {1e9, -1});
  for (int64_t i = 0; i < m; ++i) {
    chz[z[i].first] = min(chz[z[i].first], {z[i].second, i + 1});
  }
  vector<vector<int64_t>> dp(a + 1, vector<int64_t>(m + 1, 1e18));
  dp[0][0] = 0;
  for (int64_t i = 0; i < a; ++i) {
    for (int64_t j = 0; j < m + 1; ++j) {
      if (!rn[i]) {
        dp[i + 1][0] = min(dp[i + 1][0], dp[i][j]);
      }
    }
    for (int64_t j = 1; j < m + 1; ++j) {
      dp[i + 1][j] = min(dp[i + 1][j], dp[i][j] + z[j - 1].second);
      if (chz[i].second != -1) {
        dp[i + 1][chz[i].second] =
            min(dp[i + 1][chz[i].second], dp[i][j] + chz[i].first);
      }
    }
    if (chz[i].second != -1) {
      dp[i + 1][chz[i].second] =
          min(dp[i + 1][chz[i].second], dp[i][0] + chz[i].first);
    }
  }
  int64_t ans = 1e18;
  for (int64_t i = 0; i < m + 1; ++i) {
    ans = min(ans, dp[a][i]);
  }
  if (ans > 1e15) {
    cout << -1;
    return 0;
  }
  cout << ans << endl;
  return 0;
}
