Given an `amount` and coin denominations `coins` (unlimited supply of each), return the number of distinct combinations of coins that sum to amount. Order does not matter.