Multidimensional char array in PROGMEM

Hi, can anyone tell me the best way to declare a multidimensional char array in PROGMEM?
I am trying to declare something like:

#define FRUITS 0
#define VEGETABLES 1

const char products[FRUITS][0][] PROGMEM = "Apple"
const char products[FRUITS][1][] PROGMEM = "Banana"
const char products[FRUITS][2][] PROGMEM = "Strawberry"
const char products[VEGETABLES][1][] PROGMEM = "Potato"
const char products[VEGETABLES][2][] PROGMEM = "Carrot"

This is not working. Also, I don't want to waste memory space. I'm not sure if this way I'll waste some memory or not. Maybe declare a new type? Any help is really welcome.
Sorry for dummy question, but I'm new on C++/Arduino programming.

Something like:

const char products[][3][12] PROGMEM {{"Apple", "Banana", "Strawberry"}, {"Potato", "Carrot"}};

Gfvalvo's answer works great, and is preferred if all strings have similar lengths. The drawback is that every string in the 2D array will consist of 12 characters, no matter how long the actual string is. This means that "Apple" is followed by 7 null bytes, 6 of which are "wasted".

The usual solution is to store each string in a separate variable, and then save pointers to the strings in a 2D array. This way, each string only takes up as much space as required to store that string. You do have to keep in mind that you need 2 bytes for each pointer.
The disadvantage is that it gets pretty messy, so I usually move everything to a separate file, and only expose one function to get a string at the given index of the array.

Here's an example of a 1D string array. It was generated using a basic Python script, which can be a good idea if you have to save a lot of strings.
Implementation file (contains the strings and the array)
Header file (this file is #included in the main sketch, only look at the function declaration, everything else is boilerplate for the library it is in)

Remember to always use the pgm_read_* functions to read from PROGMEM.