Loan "generous" amounts of money Introduction
You have a friend that keeps asking you for loans and you are getting tired of it. Today, he came for a loan again.  Instead of turning down his offer, you get a great idea: troll your friend by giving him as many coins/bills as possible.
Challenge
You will take as input: the amount of money your friend wants a loan for and the amount of coins/bills you have. For this challenge, the possible denominations are $20.00, $10.00, $5.00, $2.00, $1.00, $0.25, $0.10, $0.05, and $0.01. An example of input is 5.67, [5, 3, 4, 5, 5, 9, 8, 1, 2] if you friend wants $5.67 and you have 5 $20 bills, 3 $10 bills, etc. Your output will be the amount of coins/bills that gives your friend as much metal/paper/plastic as possible.
If it is not possible to give your friend the exact amount of money he wants, give him the closest amount of money you can pay that is greater than what he wants. For example, if your friend wants $0.07 but you only have [0, 0, 0, 0, 0, 2, 4, 2, 0], give him 2 $0.05 coins (not 1 $0.10 because that wouldn't be giving him as many coins as possible!).
If your friend wants more money than you have, give him all your money (and pray you won't need to buy anything).
Test cases
Input:  6.54, [9, 8, 7, 6, 5, 4, 3, 2, 4]
Output: [0, 0, 0, 1, 4, 1, 2, 1, 4]

Input:  2, [0, 1, 0, 0, 0, 0, 0, 0, 0]
Output: [0, 1, 0, 0, 0, 0, 0, 0, 0]

Input:  9999, [0, 0, 0, 0, 0, 0, 0, 0, 1]
Output: [0, 0, 0, 0, 0, 0, 0, 0, 1]

Input:  0, [99, 99, 99, 99, 99, 99, 99, 99, 99]
Output: [0, 0, 0, 0, 0, 0, 0, 0, 0]


This is code-golf so shortest code wins.
Clean, 167 bytes

import StdEnv
@n l#m=[p\\p&lt;-[[if(y==u)(x-1)x\\x&lt;-l&amp;y&lt;-[0..]]\\u&lt;-[0..]&amp;v&lt;-l|v&gt;0]|sum[a*b\\a&lt;-[2000,1000,500,200,100,25,10,5,1]&amp;b&lt;-p]&gt;=toInt(n*100.0)]
|m&gt;[]= @n(hd m)=l


Defines the function @, taking Real and [Int].

Try it online!