#include <iostream>
using namespace std;

int tab[20000001];
int tab2[20000001];
int replikacja[501][1001];
int m;                           //długość łańcucha wymaganej sekwencji
int sekwencja[1001];             //szukany ciąg znaków
int il;
unsigned int hashmax;

unsigned int hashuj(int tabela[])
{
   unsigned int hash = 0;
   for (int i=0; i<m; i++)
   {
      hash = hash * (unsigned int)997 + (unsigned int)tabela[i];
   }
   return hash;
}

void policzhashmax()
{
   hashmax = 1;
   for (int i=1; i<m; i++)
   {
      hashmax = hashmax * (unsigned int)997;
   }
}

unsigned int hashnast(unsigned int hash, unsigned int rem, unsigned int add)
{
   return (hash - rem * hashmax)*(unsigned int)997 + add;
}

void eksplozja(int zrodlo[], int docelowe[], int el)
{
   int b=0;
   for (int i=0; i<el; i++)
   {
      int a = zrodlo[i]-1;                           //indeks danej komórki
      il += (replikacja[a][0] - 1);
      if (il>20000000)
      {
         return;
      }
      for (int j=1; j<=replikacja[a][0]; j++)
      {
         docelowe[b++] = replikacja[a][j];
      }
   }
}

bool porownaj(int tabela[])
{
   for (int i=0; i<m; i++)   
   {
      if (tabela[i]!=sekwencja[i])  
         return false;
   }
   return true;
}

int main()
{
	ios_base::sync_with_stdio(0);

//Wczytywanie
   int n;                           //ilość typów komórek

   cin>>n;
   cin>>m;
   
   for (int i=0; i<n; i++)
   {
        cin>>replikacja[i][0];
        for (int j=1; j<=replikacja[i][0]; j++)
        {
            cin>>replikacja[i][j];
        }
   }   
   
   for (int i=0; i<m; i++)
   {
      cin>>sekwencja[i];
   }
   
   policzhashmax();
   unsigned int hs = hashuj(sekwencja);

//Sprawdzanie danych
   int wynik=1;
   il=1;
   tab[0]=1;
   
   int *pierwsza = tab;
   int *druga = tab2;
   int *tmp;
   
   for (int i=0; i<il; i++)
   {     
      if (il>=m)
      {
         unsigned int hash = hashuj(pierwsza);
         for (int j=0; j<=il-m; j++)
         {
            if (hs == hash)
            {
               if (porownaj(pierwsza+j))
               {
                  cout<<wynik;
                  return 0;
               }
               
            }
            hash = hashnast(hash, pierwsza[j], pierwsza[m+j]);
         }
      }
      
      eksplozja(pierwsza, druga, il);
      if (il>40000*m)
      {
         cout<<-1;
         return 0;
      }
      wynik++;
      tmp = druga;
      druga = pierwsza;
      pierwsza = tmp;
   }
}
