#include <bits/stdc++.h>
using namespace std;
const int N = 2005;
const int inf = N * 1e5 + 5;
int a, m, n, l, r, pos[N], we[N] = {inf}, dp[N][N], umb[N];
bool rain[N] = {0};
template <class T>
void umin(T &a, T b) {
  a = min(a, b);
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> a >> m >> n;
  for (auto i = (0) - ((0) > (m)); i != m - ((0) > (m));
       i += 1 - 2 * ((0) > (m))) {
    cin >> l >> r;
    for (auto j = (l) - ((l) > (r)); j != r - ((l) > (r));
         j += 1 - 2 * ((l) > (r)))
      rain[j] = 1;
  }
  for (auto i = (1) - ((1) > (n + 1)); i != n + 1 - ((1) > (n + 1));
       i += 1 - 2 * ((1) > (n + 1))) {
    cin >> pos[i] >> we[i];
    if (we[i] < we[umb[pos[i]]]) umb[pos[i]] = i;
  }
  for (auto i = (0) - ((0) > (a + 1)); i != a + 1 - ((0) > (a + 1));
       i += 1 - 2 * ((0) > (a + 1)))
    for (auto j = (0) - ((0) > (n + 1)); j != n + 1 - ((0) > (n + 1));
         j += 1 - 2 * ((0) > (n + 1)))
      dp[i][j] = inf;
  dp[0][0] = 0;
  for (auto i = (0) - ((0) > (a + 1)); i != a + 1 - ((0) > (a + 1));
       i += 1 - 2 * ((0) > (a + 1)))
    for (auto j = (0) - ((0) > (n + 1)); j != n + 1 - ((0) > (n + 1));
         j += 1 - 2 * ((0) > (n + 1))) {
      if (j != 0) umin(dp[i + 1][j], dp[i][j] + we[j]);
      if (!rain[i]) umin(dp[i + 1][0], dp[i][j]);
      if (we[umb[i]] != inf) umin(dp[i + 1][umb[i]], dp[i][j] + we[umb[i]]);
    }
  int ans = inf;
  for (auto i = (0) - ((0) > (n + 1)); i != n + 1 - ((0) > (n + 1));
       i += 1 - 2 * ((0) > (n + 1)))
    umin(ans, dp[a][i]);
  for (auto i = (0) - ((0) > (a + 1)); i != a + 1 - ((0) > (a + 1));
       i += 1 - 2 * ((0) > (a + 1))) {
    auto dpp = 0;
    0 << 0;
  }
  cout << (ans == inf ? -1 : ans) << '\n';
  return 0;
}
