#!/usr/bin/env pypy3 # -*- coding: utf-8 -*- """ Max Weighted Floor (mwf) を求める。 """ def mwf(n: int, m: int, a: int, b: int, c: int, d: int) -> int: """ Max Weighted Floor (mwf) の再帰実装。 mwf(n,m,a,b,c,d) = max_{0 <= x < n} a*x + b*floor((c*x + d)/m) 前提: - 0 < n, 0 < m 計算量: - 時間: O(log m)(ユークリッド互除法的再帰による構造縮約) """ assert 0 < n and 0 < m qc, c = divmod(c, m) a += b * qc qd, d = divmod(d, m) sum_acc = b * qd assert 0 <= c < m and 0 <= d < m n -= 1 y_max = (c * n + d) // m max_acc = max(sum_acc, sum_acc + a * n + b * y_max) if (a <= 0 and b <= 0) or (a >= 0 and b >= 0) or y_max == 0: return max_acc if a < 0: sum_acc += a + b return max(max_acc, sum_acc + mwf(y_max, c, b, a, m, (m - d - 1))) def solve(): """ 入力を受け取り、各ケースについて mwf(N, M, A, B, C, D) を求めて出力します。 """ import sys input = sys.stdin.readline T = int(input()) for _ in range(T): N, M, A, B, C, D = map(int, input().split()) assert 1 <= N assert 1 <= M ans = mwf(N, M, A, B, C, D) print(ans) if __name__ == '__main__': solve()