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
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Solution {
    private static final int INF = (int) 1e9;
    BufferedReader in;
    PrintWriter out;
    StringTokenizer st;

    public static void main(String[] args) throws Exception {
        new Solution().run();
    }

    ArrayList<Integer> a;

    public void run() throws Exception {
        in = new BufferedReader(new InputStreamReader(System.in));
        out = new PrintWriter(new OutputStreamWriter(System.out));

        long a = nextInt();
        long b = nextInt();
        int n = nextInt();

        long[] s = new long[10000001];
        s[0] = 0;
        long[] sum = new long[10000001];
        sum[0] = 0;

        for (int i = 1; i < 10000001; i++) {
            s[i] = a + (i - 1) * b;
            sum[i] = sum[i - 1] + s[i];
        }

//        for (int j = 0; j < 100; j++) {
//            if(s[j] < 10) System.out.print(" ");
//            System.out.print(s[j] + " ");
//        }
//        System.out.println();
//
//        for (int j = 0; j < 100; j++) {
//            if(sum[j] < 10) System.out.print(" ");
//
//            System.out.print(sum[j] + " ");
//        }
//        System.out.println();


        for (int i = 0; i < n; i++) {
            int l = nextInt();
            long t = nextInt();
            int m = nextInt();

            if (s[l] > t) {
                System.out.println(-1);
            } else {
                int ltmp = l;
                int rtmp = 10000000;


                while (rtmp - ltmp > 3) {
                    int mid = ltmp + (rtmp - ltmp) / 2;

                    if (s[mid] <= t && sum[mid] - sum[l - 1] <= t * m)
                        ltmp = mid;
                    else
                        rtmp = mid;
                }

                for (int j = rtmp; j >= ltmp; j--) {
                    if (s[j] <= t && sum[j] - sum[l - 1] <= t * m) {
                        System.out.println(j);
                        break;
                    }
                }
            }
        }


        in.close();
        out.close();
    }


    String next() throws IOException {
        while (st == null || !st.hasMoreTokens()) {
            st = new StringTokenizer(in.readLine());
        }
        return st.nextToken();
    }

    int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

    long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    int binpow(int a, int n) {
        if (n == 0) {
            return 1;
        }

        if (n % 2 == 1) {
            return binpow(a, n - 1) * a;
        } else {
            int b = binpow(a, n / 2);
            return b * b;
        }
    }
}