#include <bits/stdc++.h>
const int32_t MAX_N = 2e5 + 42;
std::pair<int32_t, int32_t> gasStat[MAX_N];
int32_t gasCnt;
int32_t targ, tankSize;
void input() {
  scanf("%i %i %i", &targ, &tankSize, &gasCnt);
  for (int32_t i = 0; i < gasCnt; i++) {
    scanf("%i %i", &gasStat[i].first, &gasStat[i].second);
  }
  gasStat[gasCnt] = std::make_pair(targ, 0xCAFEBABE);
  std::sort(gasStat, gasStat + gasCnt);
}
int main() {
  input();
  std::deque<std::pair<int32_t, int32_t>> avl;
  avl.emplace_front(tankSize, 0);
  int32_t lastPos = 0;
  int64_t curCost = 0;
  for (int32_t i = 0; i <= gasCnt; i++) {
    while ((not avl.empty()) && (lastPos < gasStat[i].first)) {
      int32_t nPos = std::min(avl.front().first, gasStat[i].first);
      curCost += int64_t(nPos - lastPos) * avl.front().second;
      lastPos = nPos;
      if (avl.front().first == lastPos) {
        avl.pop_front();
      }
    }
    if (lastPos < gasStat[i].first) {
      curCost = -1;
      break;
    }
    while ((not avl.empty()) && (gasStat[i].second < avl.back().second)) {
      avl.pop_back();
    }
    avl.emplace_back(gasStat[i].first + tankSize, gasStat[i].second);
  }
  printf("%lli\n", curCost);
}
