#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const int N = 2005;
int dp[N][N], r[N], u[N], p[N];
int main() {
  int a = read(), n = read(), m = read();
  for (int i = 1; i <= n; i++) {
    int L = read(), R = read();
    for (int j = L + 1; j <= R; j++) r[j] = 1;
  }
  p[0] = 1e9;
  for (int i = 1; i <= m; i++) {
    int x = read();
    p[i] = read();
    if (p[i] < p[u[x]]) u[x] = i;
  }
  memset(dp, 0x3f, sizeof(dp));
  dp[0][0] = dp[0][u[0]] = 0;
  int mn1 = 0x3f3f3f3f, mn2 = 0x3f3f3f3f;
  if (u[0] != 0) mn1 = 0, mn2 = p[u[0]];
  for (int i = 1; i <= a; i++) {
    if (r[i] == 0)
      dp[i][0] = min(dp[i][0], min(dp[i - 1][0], mn1));
    else if (r[i + 1] == 0)
      dp[i][0] = min(dp[i][0], mn2);
    for (int j = 1; j <= m; j++) {
      dp[i][j] = min(dp[i][j], dp[i - 1][j] + p[j]);
      if (u[i] == j) {
        if (r[i] == 0)
          dp[i][j] = min(dp[i][j], min(dp[i - 1][0], mn1));
        else
          dp[i][j] = min(dp[i][j], mn2);
      }
    }
    mn1 = mn2 = 0x3f3f3f3f;
    for (int j = 1; j <= m; j++) {
      if (mn1 > dp[i][j]) mn1 = dp[i][j];
      if (mn2 > dp[i][j] + p[j]) mn2 = dp[i][j] + p[j];
    }
  }
  int ans = 0x3f3f3f3f;
  for (int j = 0; j <= m; j++) ans = min(ans, dp[a][j]);
  if (ans == 0x3f3f3f3f)
    cout << -1;
  else
    cout << ans;
  return 0;
}
