#include <stdio.h>

int SIMPLE_INTEREST = 0; /* 単利 */
int COMPOUND_INTEREST = 1; /* 複利 */
int RATE_DIVISION = 8192; /* 年利率の単位の逆数 (1/x) */

/* 最終資金をシミュレートする */
long simulate(long f, int y, int interestType, double interestRate, int annualFee) {
	double interest = 0;
	int r, i;
	long long lf = f;
	r = (int)(interestRate * RATE_DIVISION + 0.5); /* 整数での計算用に変換した年利率 */
	/* 年毎のシミュレーション */
	for (i = 0; i < y; i++) {
		interest += lf * r / RATE_DIVISION; /* 利子をつける */
		if (interestType == COMPOUND_INTEREST) {
			lf += interest;
			interest = 0;
		}
		lf -= annualFee; /* 年間手数料をとる */
	}
	lf += interest;
	return (long)lf;
}

int main(void) {
	int m; /* データセット数 */
	int i, j;

	if (scanf("%d", &m) != 1) return 0;

	/* データセット毎の処理 */
	for (i = 0; i < m; i++) {
		long f; /* 初期資金 */
		int y; /* 運用年数 */
		int n; /* 運用方法の種類数 */
		long max; /* 最大の最終資金 */

		if (scanf("%ld%d%d", &f, &y, &n) != 3) return 0;
		if (f <= 0 || f > 100000000 || y <= 0 || y > 10 || n <= 0 || n > 100) return 0;
		max = f;

		/* データセット毎の処理 */
		for (j = 0; j < n; j++) {
			int it; double ir; int af; /* 入力 */
			long r;
			if (scanf("%d%lf%d", &it, &ir, &af) != 3) return 0;
			/* シミュレーション */
			r = simulate(f, y, it, ir, af);
			if (r > max) max = r; /* 最大値を記録する */
		}

		printf("%ld\n", max); /* 出力 */
	}

    return 0;
}