There are four types of common coins in   US   currency:

   quarters   (25 cents)
   dimes   (10 cents)
   nickels   (5 cents),   and 
   pennies   (1 cent) 


There are six ways to make change for 15 cents:

   A dime and a nickel 
   A dime and 5 pennies
   3 nickels
   2 nickels and 5 pennies
   A nickel and 10 pennies
   15 pennies


Task

How many ways are there to make change for a dollar using these common coins?     (1 dollar = 100 cents).



Optional

Less common are dollar coins (100 cents);   and very rare are half dollars (50 cents).   With the addition of these two coins, how many ways are there to make change for $1000?

(Note:   the answer is larger than   232).



References

 an algorithm from the book Structure and Interpretation of Computer Programs.
 an article in the algorithmist.
 Change-making problem on Wikipedia.


-- All input values must be integers and multiples of the same monetary unit.
on countCoins(amount, denominations)
    -- Potentially long list of counters, initialised with 1 (result for amount 0) and 'amount' zeros.
    script o
        property counters : {1}
    end script
    repeat amount times
        set end of o's counters to 0
    end repeat
 
    -- Less labour-intensive alternative to the following repeat's c = 1 iteration.
    set coinValue to beginning of denominations
    repeat with n from (coinValue + 1) to (amount + 1) by coinValue
        set item n of o's counters to 1
    end repeat
 
    repeat with c from 2 to (count denominations)
        set coinValue to item c of denominations
        repeat with n from (coinValue + 1) to (amount + 1)
            set item n of o's counters to (item n of o's counters) + (item (n - coinValue) of o's counters)
        end repeat
    end repeat
 
    return end of o's counters
end countCoins
 
-- Task calls:
set c1 to countCoins(100, {25, 10, 5, 1})
set c2 to countCoins(1000 * 100, {100, 50, 25, 10, 5, 1})
return {c1, c2}