#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int n, m, k, par[maxn], ans[maxn];
bool arr[maxn];
pair<int, pair<int, int>> e[maxn];
int get_path(int v) { return par[v] < 0 ? v : (par[v] = get_path(par[v])); }
void merge(int v, int u) {
  if ((v = get_path(v)) == (u = get_path(u))) return;
  if (par[v] < par[u]) swap(v, u);
  par[u] += par[v];
  par[v] = u;
  arr[u] = arr[u] || arr[v];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m >> k;
  for (int i = 0; i < k; i++) {
    int x;
    cin >> x;
    arr[x] = 1;
  }
  for (int i = 0; i < m; i++) {
    int u, v, w;
    cin >> u >> v >> w;
    e[i] = {w, {u, v}};
  }
  sort(e, e + m);
  int ind;
  memset(par, -1, sizeof(par));
  for (int i = 0; i < m; i++) {
    int u = e[i].second.first, v = e[i].second.second;
    if ((u = get_path(u)) != (v = get_path(v)) && arr[u] && arr[v]) {
      ind = i;
    }
    merge(u, v);
  }
  for (int i = 0; i < k; i++) {
    cout << e[ind].first << " ";
  }
  return 0;
}
