#include <bits/stdc++.h>
using namespace std;
struct node {
  long long p;
  int d;
} store[200005];
bool cmp(node& a, node& b) { return a.d < b.d; }
bool check(int e, int full, int n) {
  if (store[0].d > full) return 1;
  for (int i = 0; i < (n - 1); ++i)
    if (store[i + 1].d - store[i].d > full) return 1;
  if (e - store[n - 1].d > full) return 1;
  return 0;
}
int main(void) {
  int e, full, n;
  scanf("%d %d %d", &e, &full, &n);
  for (int i = 0; i < (n); ++i) scanf("%d %lld", &store[i].d, &store[i].p);
  sort(store, store + n, cmp);
  if (check(e, full, n)) {
    puts("-1");
    return 0;
  }
  long long ret = 0;
  int cur = full - store[0].d;
  for (int i = 0; i < (n); ++i) {
    int d = store[i + 1].d - store[i].d;
    int s = i + 1, minn = 1e7, indexx;
    bool flag = 0;
    while (d <= full && s < n) {
      if (store[s].p <= store[i].p) {
        if (d <= cur) {
          cur -= d;
        } else {
          ret += (d - cur) * store[i].p;
          cur = 0;
        }
        i = s - 1;
        flag = 1;
        break;
      }
      if (store[s].p <= minn) {
        minn = store[i].p;
        indexx = s;
      }
      s++;
      d = store[s].d - store[i].d;
    }
    if (!flag) {
      if (store[i].d + full >= e) {
        ret += store[i].p * max(0, e - store[i].d - cur);
        break;
      }
      ret += (full - cur) * store[i].p;
      cur = full - (store[indexx].d - store[i].d);
      i = indexx - 1;
    }
  }
  printf("%lld", ret);
  return 0;
}
