# PARTIEL BUG # # Mauvaise réponse sur le test 2 # Complexité: O(k*n*log(n)), cela ne semble pas être le problème (ou pas encore) # l'idée est de trier à chaque fois pour trouver l'élément qui, en prenant en compte les k_-1 réductions qu'il va offrir, coûtera le moins cher def find_best(k): return lambda x: x[0]-(k-1)*x[1] def main(): n, k = map(int, input().split()) discos = [tuple(map(int, input().split())) for _ in range(n)] balance = 0 total_discount = 0 for k_ in range(k, 0, -1): if len(discos) == 0: exit(1) # On cherche celui qui rapportera le plus (/coûtera le moins) discos.sort(key=find_best(k_)) # On prend en compte combien il nous fait gagner balance -= discos[0][0] total_discount += discos[0][1]*(k_-1) del discos[0] return -(balance+total_discount) for _ in range(int(input())): print(main())