Question: 
Write a function to count coin change.


Model's Code:
def coin_change(coins, amount, target):
    if target == 0:
        return 1
    if target < 0 or amount == 0:
        return 0
    return coin_change(coins, amount - 1, target) + coin_change(coins, amount, target - coins[amount - 1])



Sample Correct Code:
def coin_change(S, m, n): 
    table = [[0 for x in range(m)] for x in range(n+1)] 
    for i in range(m): 
        table[0][i] = 1
    for i in range(1, n+1): 
        for j in range(m): 
            x = table[i - S[j]][j] if i-S[j] >= 0 else 0
            y = table[i][j-1] if j >= 1 else 0 
            table[i][j] = x + y   
    return table[n][m-1] 


Asserts:
assert coin_change([1, 2, 3],3,4)==4
assert coin_change([4,5,6,7,8,9],6,9)==2
assert coin_change([4,5,6,7,8,9],6,4)==1


Tests:
Test 1 of 3: PASS
Test 2 of 3: PASS
Test 3 of 3: PASS

Test 918 of 974: 705/918 (76.79738562091504%): success