/*
Lord Jesus, grant me clarity and patience to write clean code.
Buddha, help my mind be calm and mindful so I see the errors before they happen.
Allah, guide my hands on the straight path of logic, free from bugs and confusion.
May every compile be smooth, and every run be successful.
Amen. So be it. Ameen.
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<ll,pll> lll;
typedef array<ll,3> arr3;
typedef pair<ll,arr3> pq3;
#define fi first
#define se second
const ll maxN = 1e5 + 5, maxM = 5e4 + 5, maxLog = 20;
ll n, h [maxN], st [maxN], en [maxN], pr [maxN] [maxLog], cnt, t, f [maxN], m, k, f2 [maxN];
vector <ll> adj [maxN], ver;
stack <ll> sta;
vector <pll> edge;
void dfs (ll x, ll par) {
h [x] = h [par] + 1;
pr [x] [0] = par;
for (int i = 1; i < maxLog; i ++) pr [x] [i] = pr [pr [x] [i - 1]] [i - 1];
st [x] = ++ cnt;
for (ll i : adj [x]) if (i != par) dfs (i, x);
en [x] = cnt;
}
ll lca (ll x, ll y) {
if (h [x] < h [y]) swap (x, y);
if (h [x] > h [y]) {
ll dis = h [x] - h [y];
for (int i = 0; i < maxLog; i ++) if ((dis >> i) & 1) x = pr [x] [i];
}
if (x == y) return x;
for (int i = maxLog - 1; ~i; i --) {
if (pr [x] [i] != pr [y] [i]) {
x = pr [x] [i];
y = pr [y] [i];
}
}
return pr [x] [0];
}
bool cmp (ll x, ll y) {return st [x] < st [y];}
void build () {
t = ver. size ();
if (t < 2) {
ver. clear ();
return;
}
sort (ver. begin (), ver. end (), cmp);
for (int i = 1; i < t; i ++) ver. push_back (lca (ver [i], ver [i - 1]));
sort (ver. begin (), ver. end (), cmp);
ver. erase (unique (ver. begin (), ver. end ()), ver. end ());
sta. push (ver [0]);
for (int i = 1; i < ver. size (); i ++) {
f [ver [i]] ++;
//cerr << ver [i] << '+' << '\n';
while (en [sta. top ()] < st [ver [i]]) sta. pop ();
f [sta. top ()] --;
//cerr << sta. top ()<< '-' << '\n';
sta. push (ver [i]);
}
while (!sta. empty ()) sta. pop ();
ver. clear ();
}
void dfs2 (ll x, ll par) {
for (ll i : adj [x]) if (i != par) {
dfs2 (i, x);
f2 [x] += f [i];
}
f [x] += f2 [x];
}
signed main () {
ios::sync_with_stdio (0);
cin. tie (0);
cout. tie (0);
#define task "untitled1"
if (fopen (task".inp", "r")) {
freopen (task".inp", "r", stdin );
freopen (task".out", "w", stdout);
}
cin >> n >> m >> k;
for (int i = 1, u, v; i < n; i ++) {
cin >> u >> v;
adj [u]. push_back (v);
adj [v]. push_back (u);
edge. push_back ({u, v});
}
dfs (1, 0);
for (int c, x; m; m --) {
cin >> c;
for (;c;c --) {
cin >> x;
ver. push_back (x);
}
//for (ll i : ver) cerr << i << ' '; cerr << '\n';
build ();
//for (int i = 1; i <= n; i ++) cerr << f [i] << ' '; cerr << '\n';
}
dfs2 (1, 0);
//for (int i = 1; i <= n; i ++) cerr << f [i] << ' '; cerr << '\n';
vector <ll> ans;
cnt = 0;
for (pll i : edge) {
cnt ++;
if (i. fi == pr [i. se] [0] && f2 [i. fi] >= k && f [i. se] >= k) ans. push_back (cnt);
else if (f2 [i. se] >= k && f [i. fi] >= k) ans. push_back (cnt);
}
cout << ans. size () << '\n';
for (ll i : ans) cout << i << ' ';
}
LyoKTG9yZCBKZXN1cywgZ3JhbnQgbWUgY2xhcml0eSBhbmQgcGF0aWVuY2UgdG8gd3JpdGUgY2xlYW4gY29kZS4KQnVkZGhhLCBoZWxwIG15IG1pbmQgYmUgY2FsbSBhbmQgbWluZGZ1bCBzbyBJIHNlZSB0aGUgZXJyb3JzIGJlZm9yZSB0aGV5IGhhcHBlbi4KQWxsYWgsIGd1aWRlIG15IGhhbmRzIG9uIHRoZSBzdHJhaWdodCBwYXRoIG9mIGxvZ2ljLCBmcmVlIGZyb20gYnVncyBhbmQgY29uZnVzaW9uLgpNYXkgZXZlcnkgY29tcGlsZSBiZSBzbW9vdGgsIGFuZCBldmVyeSBydW4gYmUgc3VjY2Vzc2Z1bC4KQW1lbi4gU28gYmUgaXQuIEFtZWVuLgoqLwojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxsbCxsbD4gcGxsOwp0eXBlZGVmIHBhaXI8bGwscGxsPiBsbGw7CnR5cGVkZWYgYXJyYXk8bGwsMz4gYXJyMzsKdHlwZWRlZiBwYWlyPGxsLGFycjM+IHBxMzsKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAoKY29uc3QgbGwgbWF4TiA9IDFlNSArIDUsIG1heE0gPSA1ZTQgKyA1LCBtYXhMb2cgPSAyMDsKCmxsIG4sIGggW21heE5dLCBzdCBbbWF4Tl0sIGVuIFttYXhOXSwgcHIgW21heE5dIFttYXhMb2ddLCBjbnQsIHQsIGYgW21heE5dLCBtLCBrLCBmMiBbbWF4Tl07CnZlY3RvciA8bGw+IGFkaiBbbWF4Tl0sIHZlcjsKc3RhY2sgPGxsPiBzdGE7CnZlY3RvciA8cGxsPiBlZGdlOwoKdm9pZCBkZnMgKGxsIHgsIGxsIHBhcikgewogICAgaCBbeF0gPSBoIFtwYXJdICsgMTsKICAgIHByIFt4XSBbMF0gPSBwYXI7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IG1heExvZzsgaSArKykgcHIgW3hdIFtpXSA9IHByIFtwciBbeF0gW2kgLSAxXV0gW2kgLSAxXTsKICAgIHN0IFt4XSA9ICsrIGNudDsKICAgIGZvciAobGwgaSA6IGFkaiBbeF0pIGlmIChpICE9IHBhcikgZGZzIChpLCB4KTsKICAgIGVuIFt4XSA9ICAgIGNudDsKfQoKbGwgbGNhIChsbCB4LCBsbCB5KSB7CiAgICBpZiAoaCBbeF0gPCBoIFt5XSkgc3dhcCAoeCwgeSk7CiAgICBpZiAoaCBbeF0gPiBoIFt5XSkgewogICAgICAgIGxsIGRpcyA9IGggW3hdIC0gaCBbeV07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMb2c7IGkgKyspIGlmICgoZGlzID4+IGkpICYgMSkgeCA9IHByIFt4XSBbaV07CiAgICB9CiAgICBpZiAoeCA9PSB5KSByZXR1cm4geDsKICAgIGZvciAoaW50IGkgPSBtYXhMb2cgLSAxOyB+aTsgaSAtLSkgewogICAgICAgIGlmIChwciBbeF0gW2ldICE9IHByIFt5XSBbaV0pIHsKICAgICAgICAgICAgeCA9IHByIFt4XSBbaV07CiAgICAgICAgICAgIHkgPSBwciBbeV0gW2ldOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBwciBbeF0gWzBdOwp9Cgpib29sIGNtcCAobGwgeCwgbGwgeSkge3JldHVybiBzdCBbeF0gPCBzdCBbeV07fQoKdm9pZCBidWlsZCAoKSB7CiAgICB0ID0gdmVyLiBzaXplICgpOwogICAgaWYgKHQgPCAyKSB7CiAgICAgICAgdmVyLiBjbGVhciAoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBzb3J0ICh2ZXIuIGJlZ2luICgpLCB2ZXIuIGVuZCAoKSwgY21wKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdDsgaSArKykgdmVyLiBwdXNoX2JhY2sgKGxjYSAodmVyIFtpXSwgdmVyIFtpIC0gMV0pKTsKICAgIHNvcnQgKHZlci4gYmVnaW4gKCksIHZlci4gZW5kICgpLCBjbXApOwogICAgdmVyLiBlcmFzZSAodW5pcXVlICh2ZXIuIGJlZ2luICgpLCB2ZXIuIGVuZCAoKSksIHZlci4gZW5kICgpKTsKICAgIHN0YS4gcHVzaCAodmVyIFswXSk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IHZlci4gc2l6ZSAoKTsgaSArKykgewogICAgICAgIGYgW3ZlciBbaV1dICsrOwogICAgICAgIC8vY2VyciA8PCB2ZXIgW2ldIDw8ICcrJyA8PCAnXG4nOwogICAgICAgIHdoaWxlIChlbiBbc3RhLiB0b3AgKCldIDwgc3QgW3ZlciBbaV1dKSBzdGEuIHBvcCAoKTsKICAgICAgICBmIFtzdGEuIHRvcCAoKV0gLS07CiAgICAgICAgLy9jZXJyIDw8IHN0YS4gdG9wICgpPDwgJy0nIDw8ICdcbic7CiAgICAgICAgc3RhLiBwdXNoICh2ZXIgW2ldKTsKICAgIH0KICAgIHdoaWxlICghc3RhLiBlbXB0eSAoKSkgc3RhLiBwb3AgKCk7CiAgICB2ZXIuIGNsZWFyICgpOwp9Cgp2b2lkIGRmczIgKGxsIHgsIGxsIHBhcikgewogICAgZm9yIChsbCBpIDogYWRqIFt4XSkgaWYgKGkgIT0gcGFyKSB7CiAgICAgICAgZGZzMiAoaSwgeCk7CiAgICAgICAgZjIgW3hdICs9IGYgW2ldOwogICAgfQogICAgZiBbeF0gKz0gZjIgW3hdOwp9CgpzaWduZWQgbWFpbiAoKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyAoMCk7CiAgICBjaW4uIHRpZSAoMCk7CiAgICBjb3V0LiB0aWUgKDApOwogICAgI2RlZmluZSB0YXNrICJ1bnRpdGxlZDEiCiAgICBpZiAoZm9wZW4gKHRhc2siLmlucCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuICh0YXNrIi5pbnAiLCAiciIsIHN0ZGluICk7CiAgICAgICAgZnJlb3BlbiAodGFzayIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgY2luID4+IG4gPj4gbSA+PiBrOwogICAgZm9yIChpbnQgaSA9IDEsIHUsIHY7IGkgPCBuOyBpICsrKSB7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICBhZGogW3VdLiBwdXNoX2JhY2sgKHYpOwogICAgICAgIGFkaiBbdl0uIHB1c2hfYmFjayAodSk7CiAgICAgICAgZWRnZS4gcHVzaF9iYWNrICh7dSwgdn0pOwogICAgfQogICAgZGZzICgxLCAwKTsKICAgIGZvciAoaW50IGMsIHg7IG07IG0gLS0pIHsKICAgICAgICBjaW4gPj4gYzsKICAgICAgICBmb3IgKDtjO2MgLS0pIHsKICAgICAgICAgICAgY2luID4+IHg7CiAgICAgICAgICAgIHZlci4gcHVzaF9iYWNrICh4KTsKICAgICAgICB9CiAgICAgICAgLy9mb3IgKGxsIGkgOiB2ZXIpIGNlcnIgPDwgaSA8PCAnICc7IGNlcnIgPDwgJ1xuJzsKICAgICAgICBidWlsZCAoKTsKICAgICAgICAvL2ZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkgKyspIGNlcnIgPDwgZiBbaV0gPDwgJyAnOyBjZXJyIDw8ICdcbic7CiAgICB9CiAgICBkZnMyICgxLCAwKTsKICAgIC8vZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSArKykgY2VyciA8PCBmIFtpXSA8PCAnICc7IGNlcnIgPDwgJ1xuJzsKICAgIHZlY3RvciA8bGw+IGFuczsKICAgIGNudCA9IDA7CiAgICBmb3IgKHBsbCBpIDogZWRnZSkgewogICAgICAgIGNudCArKzsKICAgICAgICBpZiAoaS4gZmkgPT0gcHIgW2kuIHNlXSBbMF0gJiYgZjIgW2kuIGZpXSA+PSBrICYmIGYgW2kuIHNlXSA+PSBrKSBhbnMuIHB1c2hfYmFjayAoY250KTsKICAgICAgICBlbHNlIGlmIChmMiBbaS4gc2VdID49IGsgJiYgZiBbaS4gZmldID49IGspIGFucy4gcHVzaF9iYWNrIChjbnQpOwogICAgfQogICAgY291dCA8PCBhbnMuIHNpemUgKCkgPDwgJ1xuJzsKICAgIGZvciAobGwgaSA6IGFucykgY291dCA8PCBpIDw8ICcgJzsKfQo=