#include <bits/stdc++.h>
using namespace std;
struct node {
  long long v, x;
  node(long long x1 = 0, long long x2 = 0) { x = x1, v = x2; }
};
deque<node> s;
long long x[200010], p[200010];
struct node1 {
  long long x, p, id;
} t[200010];
bool cmp(node1 a, node1 b) { return a.x < b.x; }
signed main() {
  long long dis, n, m;
  scanf("%I64d%I64d%I64d", &dis, &m, &n);
  for (long long i = 1; i <= n; i++)
    scanf("%I64d%I64d", &t[i].x, &t[i].p), t[i].id = i;
  t[++n].x = dis, t[n].id = n;
  sort(t + 1, t + n + 1, cmp);
  for (long long i = 1; i <= n; i++) x[i] = t[i].x, p[i] = t[i].p;
  s.push_back(node(m, 0));
  long long ans = 0;
  for (long long i = 1; i <= n; i++) {
    long long d = x[i] - x[i - 1];
    long long tot = m;
    if (d > m) {
      printf("-1");
      return 0;
    }
    while (d > s.front().x) {
      ans += s.front().x * s.front().v;
      d -= s.front().x;
      tot -= s.front().x;
      s.pop_front();
    }
    ans += d * s.front().v;
    s.front().x -= d;
    tot -= d;
    while (!s.empty() && s.back().v > p[i]) tot -= s.back().x, s.pop_back();
    s.push_back(node(m - tot, p[i]));
  }
  printf("%I64d", ans);
  return 0;
}
