#include <bits/stdc++.h>
int main() {
  int a, n, m;
  while (std::cin >> a >> n >> m) {
    std::vector<bool> rain(a + 1);
    std::vector<int> l(n), r(n);
    for (int i = 0; i < n; ++i) std::cin >> l[i] >> r[i];
    for (int i = 0; i < n; ++i) {
      for (int j = l[i]; j <= r[i]; ++j) {
        rain[j] = true;
      }
    }
    std::vector<int> umbrella(a + 1, INT_MAX);
    for (int i = 0; i < m; ++i) {
      int a, p;
      std::cin >> a >> p;
      umbrella[a] = std::min(umbrella[a], p);
    }
    std::vector<int64_t> dp(a + 1, INT_MAX);
    for (int i = 0; i <= a; ++i) {
      dp[i] = 0;
      if (rain[i]) break;
    };
    for (int i = 0; i <= a; ++i) {
      bool check = false;
      for (int j = 0; j < n; ++j) {
        if (l[j] < i and i <= r[j]) check = true;
      }
      for (int j = 0; j <= i; ++j) {
        if (umbrella[j] != INT_MAX)
          dp[i] = std::min(dp[i], dp[j] + (int64_t)umbrella[j] * (i - j));
      }
      if (not check) {
        if (i > 0) dp[i] = std::min(dp[i], dp[i - 1]);
      }
    };
    if (dp[a] == INT_MAX) {
      std::cout << -1 << "\n";
    } else {
      std::cout << dp[a] << "\n";
    }
  }
  return 0;
}
