Karafs is some kind of vegetable in shape of an 1 × h rectangle. Tavaspolis people love Karafs and they use Karafs in almost any kind of food. Tavas, himself, is crazy about Karafs.

<image>

Each Karafs has a positive integer height. Tavas has an infinite 1-based sequence of Karafses. The height of the i-th Karafs is si = A + (i - 1) × B.

For a given m, let's define an m-bite operation as decreasing the height of at most m distinct not eaten Karafses by 1. Karafs is considered as eaten when its height becomes zero.

Now SaDDas asks you n queries. In each query he gives you numbers l, t and m and you should find the largest number r such that l ≤ r and sequence sl, sl + 1, ..., sr can be eaten by performing m-bite no more than t times or print -1 if there is no such number r.

Input

The first line of input contains three integers A, B and n (1 ≤ A, B ≤ 106, 1 ≤ n ≤ 105).

Next n lines contain information about queries. i-th line contains integers l, t, m (1 ≤ l, t, m ≤ 106) for i-th query.

Output

For each query, print its answer in a single line.

Examples

Input

2 1 4
1 5 3
3 3 10
7 10 2
6 4 8


Output

4
-1
8
-1


Input

1 5 2
1 5 10
2 7 4


Output

1
2
#include <bits/stdc++.h>
using namespace std;
long long AIB[1LL << 20], Aint[2 * 1LL << 20];
inline void UpdateAIB(long long val, int pos) {
  for (int i = pos; i <= 1000002; i += (i & (-i))) AIB[i] += val;
}
inline long long SumAIB(int pos) {
  long long sum = 0;
  for (int i = pos; i > 0; i -= (i & (-i))) sum += AIB[i];
  return sum;
}
inline long long SumaInterval(int st, int dr) {
  return (SumAIB(dr) - SumAIB(st - 1));
}
long long QueryAint(int nod, int st, int dr, int a, int b) {
  if (a <= st && dr <= b) return Aint[nod];
  int mid = (st + dr) >> 1;
  long long x1 = -1, x2 = -1;
  if (a <= mid) x1 = QueryAint(((nod) << 1), st, mid, a, b);
  if (b > mid) x2 = QueryAint(((nod) << 1) + 1, mid + 1, dr, a, b);
  return max(x1, x2);
}
void UpdateAint(int nod, int st, int dr, int poz, long long val) {
  if (st >= poz && dr <= poz) {
    Aint[nod] = val;
    return;
  }
  int mid = (st + dr) >> 1;
  if (poz <= mid)
    UpdateAint(((nod) << 1), st, mid, poz, val);
  else
    UpdateAint(((nod) << 1) + 1, mid + 1, dr, poz, val);
  Aint[nod] = max(Aint[((nod) << 1)], Aint[((nod) << 1) + 1]);
}
int main() {
  int A, B, N;
  scanf("%d%d%d", &A, &B, &N);
  int ii;
  long long x = 0;
  for (ii = 1; ii <= 1000002 && x <= 1000000000000LL; ++ii) {
    x = A + 1LL * (ii - 1) * B;
    UpdateAint(1, 1, 1000002, ii, x);
    UpdateAIB(x, ii);
  }
  int GO = min(1000002, ii);
  int st, dr, L, M, T, sol;
  for (int i = 1; i <= N; ++i) {
    scanf("%d%d%d", &L, &T, &M);
    sol = -1;
    st = L;
    dr = GO;
    while (st <= dr) {
      int mid = (st + dr) >> 1;
      long long maxval = QueryAint(1, 1, 1000002, L, mid);
      if (maxval <= T) {
        if (mid - L + 1 <= M) {
          sol = mid;
          st = mid + 1;
          continue;
        } else {
          if (1LL * M * T >= SumaInterval(L, mid)) {
            sol = mid;
            st = mid + 1;
            continue;
          } else
            dr = mid - 1;
        }
      }
      dr = mid - 1;
    }
    printf("%d\n", sol);
  }
  return 0;
}
