#include <bits/stdc++.h>
using namespace std;
vector<long long> c, t;
void update(long long v, long long l, long long r, long long m) {
  t[v] = t[v * 2 + 1] + (m - l) * c[2 * v + 1] + t[2 * v + 2] +
         (r - m) * c[2 * v + 2];
}
void push(long long v) {
  c[2 * v + 1] += c[v];
  c[2 * v + 2] += c[v];
  c[v] = 0;
}
long long get_sum(long long v, long long l, long long r, long long a,
                  long long b) {
  if (b <= l || r <= a) {
    return 0;
  }
  if (a <= l && r <= b) {
    return (r - l) * c[v] + t[v];
  }
  push(v);
  long long m = (l + r) / 2;
  long long res =
      get_sum(2 * v + 1, l, m, a, b) + get_sum(2 * v + 2, m, r, a, b);
  update(v, l, r, m);
  return res;
}
void modify(long long v, long long l, long long r, long long a, long long b,
            long long x) {
  if (b <= l || r <= a) {
    return;
  }
  if (a <= l && r <= b) {
    c[v] += x;
    return;
  }
  push(v);
  long long m = (l + r) / 2;
  modify(2 * v + 1, l, m, a, b, x);
  modify(2 * v + 2, r, r, a, b, x);
  update(v, l, r, m);
}
vector<long long> pr;
long long get_pr(long long v) {
  if (pr[v] == v) return v;
  return pr[v] = get_pr(pr[v]);
}
signed main() {
  srand(time(NULL));
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n, m, k;
  cin >> n >> m >> k;
  map<pair<long long, long long>, long long> mm;
  vector<long long> inds(k);
  pr.resize(n);
  iota(pr.begin(), pr.end(), 0);
  vector<bool> used(n);
  for (long long i = 0; i < k; i++) {
    long long x;
    cin >> x;
    used[x - 1] = true;
  }
  vector<vector<long long>> edges;
  for (long long i = 0; i < m; i++) {
    long long u, v, w;
    cin >> u >> v >> w;
    u--, v--;
    if (u > v) {
      swap(u, v);
    }
    edges.push_back({w, u, v});
  }
  sort(edges.begin(), edges.end());
  vector<vector<long long>> ans;
  long long cnt = 0;
  for (auto e : edges) {
    long long u = e[1], v = e[2], w = e[0];
    if (get_pr(u) != get_pr(v)) {
      u = get_pr(u), v = get_pr(v);
      if (used[u]) {
        pr[v] = u;
      } else {
        pr[u] = v;
      }
      if (used[u] && used[v]) cnt++;
      if (cnt == k - 1) {
        for (long long i = 0; i < k; i++) cout << w << ' ';
        return 0;
      }
    }
  };
  return 0;
}
