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.StringTokenizer;
 
public class C_1 {
 
    static BufferedReader in;
    static PrintWriter out;
    static StringTokenizer tok;
 
    public static void main(String[] args) throws IOException {
        try {
            in = new BufferedReader(new FileReader("hull1.in"));
            out = new PrintWriter(new File("hull1.out"));
        } catch (Exception e) {
            in = new BufferedReader(new InputStreamReader(System.in));
            out = new PrintWriter(new OutputStreamWriter(System.out));
        }
 
        tok = new StringTokenizer("");
        new C_1().solve();
        out.flush();
        out.close();
    }
 
    String nextTok() throws IOException {
        if (!tok.hasMoreTokens()) {
            tok = new StringTokenizer(in.readLine());
        }
        return tok.nextToken();
    }
 
    int nextInt() throws IOException {
        return Integer.parseInt(nextTok());
    }
 
    long nextLong() throws IOException {
        return Long.parseLong(nextTok());
    }
 
    double nextDouble() throws IOException {
        return Double.parseDouble(nextTok());
    }
 
    static class Pair implements Comparable<Pair> {
 
        long a;
        long b;
 
        public Pair( long a, long b) {
 
            this.a = a;
            this.b = b;
        }
 
        public int compareTo(Pair o) {
            if (o.a < a) return 1;
            if (o.a > a) return -1;
            if (o.b > b) return -1;
            if (o.b < b) return 1;
            return 0;
        }
    }
 
    long[] arr;
    long[] p;
    long a;
    long b;
    int l;
    int m;
    long t;
    int res = 0;
 
 
 
    void solve() throws IOException {
        a = nextLong();
        b = nextLong();
        int n = nextInt();
        arr = new long[1000005];
        p = new long[1000006];
        for (int i = 1; i < 1000005; i++) {
            arr[i] = a+(i-1)*b;
            p[i] = arr[i]+p[i-1];
        }
 
        int r = 1000004;
        int ll = l;
        int mid = 0;
        long cnt = 0;
        long max = t*m;
        for (int i = 0; i < n; i++) {
            l = nextInt();
            t = nextLong();
            m = nextInt();
            ll = l;
            r = 1000004;
            max = t*m;
            while(r-l>1) {
                //System.out.println(l+" "+r);
                mid = (l+r)/2;
                cnt = p[mid]-p[ll-1];
                //System.out.println(cnt+"       sss");
                if (arr[mid] > t || cnt > max) {
                    r = mid;
                } else {
                    l = mid;
                }
            }
 
            if (l <= ll && (arr[l] > t || p[l]-p[ll-1] > max) ) {
                
                System.out.println(-1);
            } else {
                System.out.println(l);
            }
        }
 
    }
 
 
 
}