#include <bits/stdc++.h>
using namespace std;
int n, k, d;
int di[300055];
int par[300055];
bool have[300055];
set<pair<int, int> > g[300055];
queue<int> que;
int main() {
  scanf("%d %d %d", &n, &k, &d);
  for (int i = 0; i < k; i++) {
    int x;
    scanf("%d", &x);
    x--;
    have[x] = true;
  }
  for (int i = 0; i + 1 < n; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    x--, y--;
    g[x].insert(pair<int, int>(y, i));
    g[y].insert(pair<int, int>(x, i));
  }
  memset(par, -1, sizeof(par));
  memset(di, -1, sizeof(di));
  for (int i = 0; i < n; i++)
    if (have[i]) {
      que.push(i);
      di[i] = 0;
    }
  while (!que.empty()) {
    int u = que.front();
    que.pop();
    for (auto p : g[u]) {
      if (di[p.first] < 0) {
        di[p.first] = di[u] + 1;
        par[p.first] = u;
        que.push(p.first);
      }
    }
  }
  set<int> res;
  for (int i = 0; i < n; i++)
    for (auto p : g[i]) {
      if (par[i] == p.first || par[p.first] == i) continue;
      res.insert(p.second);
    }
  printf("%d\n", (int)res.size());
  bool flag = false;
  for (auto u : res) {
    if (flag)
      printf(" ");
    else
      flag = true;
    printf("%d", u + 1);
  }
  puts("");
  return 0;
}
