#include <bits/stdc++.h>
#include <stdio.h>

#define __Shibae__      signed main()
#define IOS             ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define fiopen(Path)    freopen(Path".INP", "r", stdin); freopen(Path".OUT", "w", stdout);
#define fipen(Path)     freopen(Path".INP", "r", stdin);
#define sz(s)           (int)s.size()
#define all(x)          x.begin(), x.end()
#define getBit(x, k)    (((x) >> (k)) & 1)
#define ll              long long
#define ii              pair<int, int>
#define fi              first
#define se              second
#define FOR(i, a, b)    for(int i = a, _b = b; i <= _b; i++)
#define FOD(i, a, b)    for(int i = a, _b = b; i >= _b; i--)
#define REP(i, n)       for(int i = 0; i < (n); i++)
#define pb              push_back
#define fau(x, a)       for(auto &x : a)

using namespace std;

const int MAX = 100005;
const int lg = 18;

int n, m;
ll k;

vector<ii> g[MAX];

int par[MAX][lg];
int h[MAX];
int tin[MAX];
int timer;

ll f[MAX];
int idx[MAX];

void input()
{
    cin >> n >> m >> k;

    FOR(i, 1, n - 1)
    {
        int u, v;
        cin >> u >> v;
        g[u].pb({v, i});
        g[v].pb({u, i});
    }
}

void dfs(int u, int pre, int id)
{
    tin[u] = ++timer;
    par[u][0] = pre;
    idx[u] = id;

    FOR(i, 1, lg - 1)
        par[u][i] = par[par[u][i - 1]][i - 1];

    for (auto [v, eid] : g[u])
    {
        if (v == pre) continue;
        h[v] = h[u] + 1;
        dfs(v, u, eid);
    }
}

int lca(int u, int v)
{
    if (h[u] < h[v]) swap(u, v);

    int d = h[u] - h[v];

    REP(i, lg)
        if (getBit(d, i))
            u = par[u][i];

    if (u == v) return u;

    FOD(i, lg - 1, 0)
    {
        if (par[u][i] != par[v][i])
        {
            u = par[u][i];
            v = par[v][i];
        }
    }

    return par[u][0];
}

bool cmp(int u, int v)
{
    return tin[u] < tin[v];
}

void calc(int u, int pre)
{
    for (auto [v, id] : g[u])
    {
        if (v == pre) continue;
        calc(v, u);
        f[u] += f[v];
    }
}

void solve()
{
    dfs(1, 1, 0);

    FOR(i, 1, m)
    {
        int x;
        cin >> x;

        vector<int> vertex(x);

        REP(j, x)
            cin >> vertex[j];

        if (x <= 1) continue;

        sort(all(vertex), cmp);
        vertex.erase(unique(all(vertex)), vertex.end());

        x = sz(vertex);

        if (x <= 1) continue;

        REP(j, x)
        {
            int u = vertex[j];
            int v = vertex[(j + 1) % x];
            int p = lca(u, v);

            f[u]++;
            f[v]++;
            f[p] -= 2;
        }
    }

    calc(1, 1);

    vector<int> res;

    FOR(i, 2, n)
    {
        if (f[i] / 2 >= k)
            res.pb(idx[i]);
    }

    sort(all(res));

    cout << sz(res) << "\n";
    fau(x, res)
        cout << x << " ";
}

__Shibae__
{
    IOS
    fiopen("SUADUONG");

    input();
    solve();

    return 0;
}