#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
struct PP {int k,t,x,y;};
int dx[9]={-1,-1,-1,0,0,0,1,1,1},dy[9]={-1,0,1,-1,0,1,-1,0,1};
bool check(int n,int m,int x,int y) {return x>=0&&x<n&&y>=0&&y<m;}
int main() {
  int h,w,n,sx,sy,ans=-1,t=0;
  cin >> h >> w >> n >> sx >> sy;
  sx--,sy--;
  vector<P> v[n];
  queue<PP> que;
  bool d[41][1<<n][h][w];
  memset(d,0,sizeof(d));
  for(int i=0,m; i<n; i++) {
    cin >> m;
    for(int j=0,x,y; j<m; j++) {
      cin >> x >> y;
      x--,y--;
      if(!j && x==sx && y==sy) t|=1<<i;
      v[i].push_back(P(x,y));
    }
  }
  d[0][t][sx][sy]=1;
  que.push((PP){0,t,sx,sy});
  while(!que.empty()) {
    PP p=que.front();que.pop();
    int kk=p.k,tt=p.t,nx=p.x,ny=p.y;
    if(tt==(1<<n)-1) {
      if(ans==-1) ans=kk;
      else ans=min(ans,kk);
      continue;
    }
    for(int i=0; i<9; i++) {
      int x=nx+dx[i],y=ny+dy[i],k=kk+1,t=tt,f=1;
      if(!check(h,w,x,y)) continue;
      for(int j=0; j<n; j++) {
        if(v[j][v[j].size()-1].first==x&&v[j][v[j].size()-1].second==y) f=0;
        if(t&(1<<j)) continue;
        if(v[j].size()-1<=k) f=0;
        else if(v[j][k].first==x&&v[j][k].second==y) t|=1<<j;
      }
      if(f && !d[k][t][x][y]) {
        d[k][t][x][y]=1;
        que.push((PP){k,t,x,y});
      }
    }
  }
  cout << ans << endl;
  return 0;
}
