3 of 7 added 137 characters in body

C (gcc), 131 116 90 bytes

L(l,a,v,A){for(A=5,v=1000;A--;)v-=a=A?l>59|A<3&l>44?rand()%-~v:0:v,printf("%d\n"+!a*2,a);}

Try it online!

Update: Fixed a bug in the original. Fused in the helper function, reducing an additional 15 bytes.

Update 2: -25 bytes thanks to ErikF.

Degolf

L(l,a,v,A){ // l: time, a: random value, v: remaining volume, A: level
    for(A=5,v=1000;A--;)
        v-=a=  // Assign random value and deduct it from remainder
          A?
              l>59|A<3&l>44?rand()%-~v // If layer could have something, randomize it. -~v == (v+1)
              :0 // Else, value is 0.
          :v,  // If last level, value is remaining volume
        printf("%d\n"+!a*2,a); // Print value; if a==0, advance pointer to the string constant by 2.
}