#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
std::pair<T, U> operator+(const std::pair<T, U>& l, const std::pair<T, U>& r) {
  return {l.first + r.first, l.second + r.second};
}
typedef void (*callback_function)(void);
const long long ZERO = 0LL;
const long long INF64 = 1e18;
const long long INF32 = 1e9;
const long long MOD = 1e9 + 7;
const long double PI = acos(-1.0L);
const long double EPS = static_cast<long double>(1e-9);
long long inv(long long a, long long b) {
  if (a != 1) {
    return b - (inv(b % a, a) * b) / a;
  }
  return 1;
}
inline long long Pow(long long a, long long k) {
  long long s = 1;
  for (; k; k >>= 1) {
    k& 1 ? s = 1LL * s * a % MOD : 0;
    a = 1LL * a * a % MOD;
  }
  return s;
}
const long long N = 2345;
bool rain[N];
long long weight[N];
long long dp[N];
void solve() {
  long long a, n, m;
  cin >> a >> n >> m;
  for (long long i = (1); i <= (n); i++) {
    long long L, R;
    cin >> L >> R;
    R--;
    for (long long j = (L); j <= (R); j++) {
      rain[j] = true;
    }
  }
  for (long long i = (0); i <= (a); i++) {
    weight[i] = INF32;
  }
  for (long long i = (1); i <= (m); i++) {
    long long p, w;
    cin >> p >> w;
    weight[p] = min(weight[p], w);
  }
  for (long long i = (1); i <= (a); i++) {
    dp[i] = INF32;
  }
  dp[0] = 0;
  for (long long i = (1); i <= (a); i++) {
    long long d = dp[i - 1];
    if (!rain[i - 1]) {
      dp[i] = min(dp[i], d);
    }
    if (weight[i - 1] < INF32) {
      long long w = weight[i - 1];
      for (long long j = (i); j <= (a); j++) {
        dp[j] = min(dp[j], d + w * (j - i + 1));
      }
    }
    if (dp[i] >= INF32) {
      break;
    }
  }
  cout << (dp[a] < INF32 ? dp[a] : -1) << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie();
  { solve(); }
  return 0;
}
