#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int main() {
	int n, m, k; // Количество вершин, количество победителей и количество ребер
	cin >> n >> m >> k;
	vector<int> winner(m); // Вершины, которые нам нужно достичь
	for(int i = 0; i < m; i++) 
	{
		cin >> winner[i];
		winner[i]--; // В задаче отсчёт идёт с 1, поэтому мы уменьшаем все индексы на 1
	}
	vector<vector<vector<int>>> path(n); // Список смежности с весом
	for(int i = 0; i < k; i++)
	{
		int a, b, t;
		cin >> a >> b >> t; // Соединённые вершины и вес ребра
		a--;// Сдвиг индексов на 1
		b--;
		path[a].push_back({b, t}); // В список путей из вершины 'а' добавляем вершину 'b' и длину пути
		path[b].push_back({a, t}); 
	}
	int start; // Вершина, с которой мы начинаем
	cin >> start;
	start--; // Сдвигаем индекс
	vector<int> count(n, -1); // Счётчик длины путей
	count[start] = 0; // Мы находимся в этой вершине, поэтому дистанция до неё равна 0
	queue<int> plan; // Наш план посещения вершин. Так как мы используем BFS, то это контейнером является очередь
	plan.push(start); // Кладём нашу стартовую вершину в план
	while(!plan.empty()) // Наш BFS
	{
		start = plan.front(); 
		plan.pop();
		for(auto next: path[start]) // Достаём наши пары  вершина + вес
		{
			if(count[next[0]] == -1 || count[next[0]] > count[start] + next[1]) // Если вершина не посещена или путь через ту на котором мы сейчас более короткий
			{
				plan.push(next[0]); // Мы добавляем эту вершину в план
				count[next[0]] = count[start] + next[1]; // И отмечаем дистанцию до неё
			}
		}
	}
	bool delivered = true; // Предпологаем, что мы побывали во всех вершинах, которые нам нужны
	int longest = 0; // Положим максимальную дистанцию равной нулю
	for(int i = 0; i < m && delivered; i++)
	{
		if(count[winner[i]] == -1) // Если путь до нужной вершины не был найден
		{
			delivered = false; // Отмечаем, что мы побывали не везде, где надо
		}
		longest = max(count[winner[i]], longest);
	}
	if(delivered) // Если нужные вершины посещены
	{
		cout << "The good sponsor!\n" << longest; // Выводим фразу и длину пути до самой далёкой вершины
	}
	else
	{
		cout << "It is not fault of sponsor...";
	}
	return 0;
}