#include<iostream>
using namespace std;
#define A 20123
struct lou
{
int a[101];
int b[101];//是否可通向上一层,
int c[101];
int count;
//lou():count(0) {;}
};
int BinarySearch(int *a,int len,int key)
{
int low = 0;
int high = len-1;
while(low<=high)
{
if(low==high)
{
if(a[low]>=key)
return low;
else
return (low+1)%len;
}
int m = (low+high)/2;
if(a[m]==key)
return m;
else if(a[m]>key)
high = m-1;
else
low = m+1;
}
}
int main()
{
//freopen("data.txt","r",stdin);
int n,m,beg,ans;
while(scanf("%d%d",&n,&m)!=EOF)
{
struct lou ceng[n+1];
for(int i=1;i<=n;i++)
{
ceng[i].count = 0;
for(int j=0,l=0;j<=m-1;j++)
{
scanf("%d%d",&ceng[i].b[j],&ceng[i].a[j]);
if(ceng[i].b[j]==1)
{
ceng[i].c[l++] = j;
ceng[i].count++;
} //
}
}
ans=0;
scanf("%d",&beg);
for(int i=1;i<=n;i++)
{
ans = (ans + ceng[i].a[beg])%A;
int pos = BinarySearch(ceng[i].c,ceng[i].count,beg);
ceng[i].a[beg] %= ceng[i].count;
if(ceng[i].a[beg]==0) ceng[i].a[beg] = ceng[i].count;
int t = (pos+ceng[i].a[beg]-1)%ceng[i].count;
beg = ceng[i].c[t];
}
cout<<ans<<endl;
}
return 0;
}