I might have written my last comment a little odd. What I meant, with using the first two as constraints for total space/mass available, was that within the frozen area, you can fit either fully with cases, fully with KGs, or fully with a mix of cases and KGs.
Therefore, what we are interested in is how much space of the frozen area do both cases and KGs take together. We may not need to know how many cases or KGs we have in total in a service.
I would then, before creating the services, calculate how much space these KGs take space in each areas.
So the Service should be written as something like:
service = Service.Builder.newInstance("service1")
.addSizeDimension(0, y) // Total of 25 CHILLED (20+y1)
.addSizeDimension(1, x) // Total of 40 FROZEN (30+x1)
.addSizeDimension(2, 20) // CHILLED Cases
.addSizeDimension(3, 30) // FROZEN Cases
.addSizeDimension(4, 5) // Chilled KGs
.addSizeDimension(5, 10) // Frozen KGs
Where y1 and x1 are the amount of space they take if they were cases, and y and x are the total area available as cases. Note, you can do this other ways. This is only my thought to a solution.