#include <bits/stdc++.h>
using namespace std;
int read() {
  int x;
  scanf("%d", &x);
  return x;
}
const int N = 112345;
int tin[N];
int tout[N];
bool used[N];
vector<int> v[N];
int par[N][20];
vector<int> pac[N][20];
int d[N];
int tim;
vector<int> c[N];
set<int> st;
void dfs(int x, int p, int s) {
  used[x] = 1;
  par[x][0] = p;
  tin[x] = ++tim;
  d[x] = s;
  st.clear();
  for (int i = 0; i < c[x].size(); i++) st.insert(c[x][i]);
  for (int i = 1; i < 20; i++) {
    par[x][i] = par[par[x][i - 1]][i - 1];
  }
  for (int i = 0; i < 20; i++) {
    int e = 10;
    for (set<int>::iterator j = st.begin(); j != st.end(); j++) {
      pac[x][i].push_back((*j));
      e--;
      if (e == 0) break;
    }
    while (st.size() > 10) st.erase(--st.end());
    for (int j = 0; j < pac[par[x][i]][i].size(); j++) {
      st.insert(pac[par[x][i]][i][j]);
    }
  }
  for (int i = 0; i < v[x].size(); i++) {
    int to = v[x][i];
    if (!used[to]) {
      dfs(to, x, s + 1);
    }
  }
  tout[x] = ++tim;
}
bool upper(int a, int b) { return (tin[a] <= tin[b] && tout[a] >= tout[b]); }
int lca(int a, int b) {
  if (upper(a, b)) return a;
  if (upper(b, a)) return b;
  for (int i = 19; i >= 0; i--) {
    if (!upper(par[a][i], b)) {
      a = par[a][i];
    }
  }
  return par[a][0];
}
void xkth(int x, int y) {
  while (y > 0) {
    for (int i = 0; i < 20; i++) {
      if ((1 << i) > y) {
        for (int j = 0; j < pac[x][i - 1].size(); j++)
          st.insert(pac[x][i - 1][j]);
        y -= (1 << (i - 1));
        x = par[x][i - 1];
        break;
      }
    }
  }
  for (int i = 0; i < pac[x][0].size(); i++) st.insert(pac[x][0][i]);
}
int main() {
  int n, m, i, j, q;
  n = read();
  m = read();
  q = read();
  for (i = 2; i <= n; i++) {
    int x, y;
    x = read();
    y = read();
    v[x].push_back(y);
    v[y].push_back(x);
  }
  for (i = 1; i <= m; i++) {
    int x;
    x = read();
    c[x].push_back(i);
  }
  for (i = 0; i < 20; i++) par[1][i] = 1;
  dfs(1, 1, 0);
  for (i = 1; i <= q; i++) {
    int x, y, z;
    x = read();
    y = read();
    z = read();
    st.clear();
    int l = lca(x, y);
    xkth(x, d[x] - d[l]);
    xkth(y, d[y] - d[l]);
    printf("%d ", min(z, (int)st.size()));
    for (set<int>::iterator j = st.begin(); j != st.end(); j++) {
      printf("%d ", (*j));
      z--;
      if (z == 0) break;
    }
    puts("");
  }
}
