a1/d1 are allocated with enough initial space for 123 entries.
a2/d2 are allocated with enough initial space for 5 entries.
If you know that you are going to add a bunch of entries, a1/d1 are more efficient because the dictionary won't have to keep allocating more memory to hold more and more entries.
a3/d2 are closer to a2/d2 but they are really the same as:
NSMutableArray *a4 = [[NSArray array] mutableCopy];
This is less efficient than a2.