They were low on food and stranded at sea for 3 weeks. Then a cruise ship appeared.

The two sailors had been stranded on their boat for nearly 3 weeks. They were adrift and out of fuel, low on fresh water, and surviving off what fish they managed to catch.

Hoping for an early Christmas miracle.

Their salvation came on Friday in an unexpected form: a massive cruise ship with 11 decks, a dining room, cafe, and specialty grille, four bars, a “vitality spa,” and a rock-climbing wall to boot.

The Royal Caribbean’s Empress of the Seas cruise ship discovered the two stranded mariners in a small fishing vessel Friday night halfway between Grand Cayman and Jamaica, spokesman Ted Miller told CNN.

The chance encounter was only possible because the cruise ship had been rerouted from Cienfuegos, Cuba to Ocho Rios, Jamaica due to inclement weather, he said.

The cruise ship spotted a signal light at 7 p.m. Friday evening, and then reduced speed and moved toward the small vessel. The cruise ship contacted Grand Cayman and Jamaica rescue centers, but they said they were unable to provide assistance, Miller said.

So just minutes before 10 p.m., the cruise ship lowered a smaller boat known as a tender and safely recovered the two sailors, Miller said.

The two mariners were given water and medical attention on board the ship and there were no injuries reported, Miller said.

The boaters, who were fishermen, had originally set sail from Costa Rica. As they slept overnight, their boat drifted away from their fishing gear due to the bad weather, Miller said. They ran out of fuel trying to get back, he added.

James Van Fleet, Royal Caribbean’s chief meteorologist, tweeted more details and photos of the rescue. He said that the fishermen told the cruise ship’s crew they only had enough food and water for seven days. The water was the primary issue, and they tried to fish for food.

One of the fisherman was so weak he could not walk, so the crew carried him to the tender and then on board, Van Fleet wrote.

The sailors were taken off the ship at Ocho Rios, Jamaica for medical attention. The cruise ship’s crew gave them $300 to buy clothes and food as they left the hospital.

“Had we not changed itinerary to get to better weather, we would never have been in that spot at that time. Sometimes a little luck is all you need for a miracle,” he wrote on Twitter.