The issue is that I don't need to have same number of pairs,
Not really a problem. In my previous example if there are only 5 pairs then make the other 2 empty NULL strings.
values[5][0] = '\0';
values[6][0] = '\0';
'm lost when I need to extract the elements 2by2.
It doesn't matter if you dynamically allocate the memory for the original strings or not, extracting 2b2 is the same as what I posted before.