Let us experiment
D{K} = randi(99,1,randi(5,1));
T4{K} = [A(K), B(K), C(K), D{K}];
whos T1 T2 T3 T4
Name Size Bytes Class Attributes
T1 1x4 17256 cell
T2 100x4 18479 table
T3 100x2 18001 table
T4 100x1 16776 cell
ls -l T*.mat
-rw-r--r-- 1 matlab matlabgroup 975 Jun 10 17:27 T1.mat
-rw-r--r-- 1 matlab matlabgroup 2189 Jun 10 17:27 T2.mat
-rw-r--r-- 1 matlab matlabgroup 2181 Jun 10 17:27 T3.mat
-rw-r--r-- 1 matlab matlabgroup 934 Jun 10 17:27 T4.mat
So the smallest memory size is a cell array of rows of variable size, with the first three entries in each row being a 1 x 3 row extract and the remaining entries in the row being variable entries.
Note that this is not the best storage arrangement if you are needing to extract one of the three columns from it.
The smallest file size is also the same cell array just mentioned. But the difference in file size compared to the 1 x 4 cell array is quite small; one suspects that the difference might almost be accidental, with it being plausible that with different data that the 1 x 4 cell array just might come out slightly smaller.
The versions T1 and T2 are suitable for the case where the datatypes of everything might be different.
The version T3 is suitable for the case where the datatypes of the N x 3 are all the same but the datatypes of the variable data might be different.
The version T4 depends on all of the datatypes being the same.