#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void solve() {
int n, m, k; cin >> n >> m >> k;
vector<array<int, 2>> edges(n - 1);
vector<vector<int>> adj(n);
for(auto &[u, v] : edges) {
cin >> u >> v;
u--, v--;
adj[u].push_back(v);
adj[v].push_back(u);
}
vector jmp(n, vector(20, 0));
vector<int> tin(n), tout(n);
{
int timer = 0;
auto dfs = [&](auto &&self, int v, int p) -> void {
jmp[v][0] = p;
for(int i = 1; i < 20; i++) {
jmp[v][i] = jmp[ jmp[v][i - 1] ][i - 1];
}
tin[v] = ++timer;
for(auto to : adj[v]) {
if(to == p) continue;
self(self, to, v);
}
tout[v] = timer;
};
dfs(dfs, 0, 0);
}
auto upper = [&](int u, int v) {
return tin[v] >= tin[u] && tout[v] <= tout[u];
};
auto lca = [&](int u, int v) {
if( upper(u, v) ) return u;
for(int i = 19; i >= 0; i--) {
if( !upper(jmp[u][i], v) ) {
u = jmp[u][i];
}
}
return jmp[u][0];
};
auto cmp = [&](int u, int v) {
return tin[u] <= tin[v];
};
vector<int> d(n);
while(m--) {
int S; cin >> S;
vector<int> s(S);
for(auto &v : s) {
cin >> v;
v--;
}
vector<int> t = s;
sort(t.begin(), t.end(), cmp);
for(int i = 0; i + 1 < S; i++) {
t.push_back( lca(t[i], t[i + 1]) );
}
sort(t.begin(), t.end(), cmp);
t.erase(unique(t.begin(), t.end()), t.end());
for(auto v : t) {
adj[v].clear();
}
stack<int> st;
// cout << '\n' << "cur: " << '\n';
for(auto v : t) {
while(!st.empty() && !upper(st.top(), v)) {
st.pop();
}
if(!st.empty()) {
adj[st.top()].push_back(v);
// cout << st.top() + 1 << ' ' << v + 1 << '\n';
}
st.push(v);
}
{
d[t[0]]--;
auto dfs = [&](auto &&self, int v) -> void {
d[v]++;
d[v] -= (int)adj[v].size();
for(auto to : adj[v]) {
self(self, to);
}
};
dfs(dfs, t[0]);
}
}
vector<vector< array<int, 2> >> adj2(n);
for(int i = 0; i < n - 1; i++) {
auto [u, v] = edges[i];
adj2[u].push_back({v, i});
adj2[v].push_back({u, i});
}
vector<int> ans;
{
auto dfs = [&](auto &&self, int v, int p) -> void {
for(auto [to, i] : adj2[v]) {
if(to == p) continue;
self(self, to, v);
d[v] += d[to];
if(d[to] >= k) {
ans.push_back(i);
}
}
};
dfs(dfs, 0, 0);
}
// for(auto &x : d) cout << x << ' ';
// cout << '\n';
sort(ans.begin(), ans.end());
cout << ans.size() << '\n';
for(auto &x : ans) cout << x + 1 << ' ';
cout << '\n';
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
}