You can model it this way, using your class diagram as an example. For ClassA, do as mihaisimi does: instantiate a list of ClassB in ClassA's constructor. If you want to determine exactly how many ClassB instances should be a part of a given ClassA instance, just add an integer parameter to the constructor and throw an exception if it's a 0. Then use the value passed as a loop counter for the Add method.
For ClassB, add a parameter to its constructor of type ClassC. So, something like this (java's a bit rusty, so feel free to correct my syntax as needed):
public class ClassA
{
public final List<ClassB> classBList;
public ClassA(int y){
this.myClassBList = x;
classBList = new ArrayList<ClassB>(y);
for(int i=0;i<y;i++)
{
classBList.add(new ClassB(new ClassC));
}
}
public class ClassB
{
public ClassC myClassCInstance;
public ClassB(ClassC myClassC)
{
myClassCInstance = myClassC;
}
}
As you can see, this allows you to have any number of ClassB instances associated with a ClassA instance, and ties their lifetime to ClassA as composition requires. Also, as you can see, you can't add more than one ClassC instance to any instance of ClassB, and ClassB's lifetime isn't strictly coupled to ClassB's.
So the basic difference in how to model composition and construction is this: for composition, instantiate the composed object in the composing object's (the one with the diamond) constructor, and for aggregation, pass the aggregated object into the aggregating object's constructor as a parameter.