After making your 3D array really a 2D array, it could be printed like so:
const char * const churchCalender[][5] PROGMEM = {
{"01/01" , "sunday" , "white" , "Van", "R1 num.6.22-27 R2 Gal.4.4-7 Gos.Lk.2.16-21"},
{"02/01" , "monday" , "white" , "Beat", "R1 1Jn.2:22-28 Gosp.Jn.1.19-28"},
{"03/01" , "tuesday" , "white" , "Not", "R1 1Jn.2:29-3:6 Gosp.Jn.1:29-34"},
{"04/01" , "wednesday" , "white" , "take", "R1 1Jn.3:7-10 Gosp.Jn.1:35-42"}
};
void setup() {
Serial.begin(250000);
for (byte i = 0; i < sizeof(churchCalender) / sizeof(churchCalender[0]); i++) {
Serial.print(F("{ "));
for (byte j = 0; j < sizeof(churchCalender[0]) / sizeof(churchCalender[0][0]); j++) {
Serial.write('"');
const char * ptr = (const char *) pgm_read_word(&churchCalender[i][j]);
if (ptr) {
Serial.print(ptr);
}
Serial.print(F("\", "));
}
Serial.println(F("}, "));
}
}
void loop() {}
{ "01/01", "sunday", "white", "Van", "R1 num.6.22-27 R2 Gal.4.4-7 Gos.Lk.2.16-21", },
{ "02/01", "monday", "white", "Beat", "R1 1Jn.2:22-28 Gosp.Jn.1.19-28", },
{ "03/01", "tuesday", "white", "Not", "R1 1Jn.2:29-3:6 Gosp.Jn.1:29-34", },
{ "04/01", "wednesday", "white", "take", "R1 1Jn.3:7-10 Gosp.Jn.1:35-42", },
Notice that only your pointers reside in PROGMEM, the strings stay in RAM if used like above.
See Storing and Retrieving Strings in the Program Space.