#include<cstdio>
using namespace std;
int c[10010],a[10010][101],b[10001][101];
int main(){
int i,j,n,m,t;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=0;j<m;j++){
scanf("%d%d",&a[i][j],&b[i][j]);
if(a[i][j]==1) c[i]++;} //a数组表示当前房间有没有楼梯,b数组表示当前房间的指示牌
scanf("%d",&t);
j=t;
int x=0,temp=0;
for(i=1;i<=n;i++){
x+=b[i][t];x%=20123;
j=t;
temp=0;
if(b[i][t]%c[i]==0) b[i][t]=c[i]; //为了防止指示牌上是一个比m大很多倍的数,循环太多遍会超限
else b[i][t]=b[i][t]%c[i];
if(a[i][t]==1) temp++; //如果起点有楼梯,要减去当前楼梯
while(temp<b[i][t]){ //找第二层的起始位置
j++; if(j>=m)j=0;
if(a[i][j]==1) temp++;
}
t=j;
}
printf("%d\n",x);
return 0;
}
type room=record v:0..1; p:longint; end; var n,m,i,j,k,s,ans,q:longint; a:array[1..10000,0..99] of room; num:array[1..10000] of longint; begin assign(input,'treasures.in'); reset(input); assign(output,'treasures.out'); rewrite(output); fillchar(num,sizeof(num),0); readln(n,m); for i:=1 to n do for j:=0 to m-1 do begin readln(a[i,j].v,a[i,j].p); if a[i,j].v=1 then inc(num[i]); end; readln(s); for i:=1 to n do begin ans:=(ans+a[i,s].p) mod 20123; q:=(a[i,s].p+num[i]-1) mod num[i] +1; s:=s-1; while q>0 do begin s:=(s+1)mod m; if(a[i,s].v=1) then dec(q); end; end; writeln(ans); close(input); close(output); end.
type room=record t:0..1; f:longint; end; var n,m,i,j,s,ans,q:longint; a:array[1..10000,0..99] of room; num:array[1..10000] of longint; begin assign(input,'treasures.in'); reset(input); assign(output,'treasures.out'); rewrite(output); fillchar(num,sizeof(num),0); readln(n,m); for i:=1 to n do for j:=0 to m-1 do begin readln(a[i,j].t,a[i,j].f); num[i]:=num[i]+a[i,j].t;//if a[i,j].t=1 then inc(num[i]); end; readln(s); for i:=1 to n do begin ans:=(ans+a[i,s].f) mod 20123; q:=(a[i,s].f+num[i]-1) mod num[i] +1; //q:=a[i,s].f mod num[i] + num[i]; while true do begin while a[i,s].t=0 do s:=(s+1)mod m; dec(q); if q=0 then break; s:=(s+1)mod m; end; end; writeln(ans); close(input); close(output); end.
type room=record t:0..1; f:longint; end; var n,m,i,j,s,ans,q:longint; a:array[1..10000,0..99] of room; num:array[1..10000] of longint; begin assign(input,'treasures.in'); reset(input); assign(output,'treasures.out'); rewrite(output); fillchar(num,sizeof(num),0); readln(n,m); for i:=1 to n do for j:=0 to m-1 do begin readln(a[i,j].t,a[i,j].f); num[i]:=num[i]+a[i,j].t;//if a[i,j].t=1 then inc(num[i]); end; readln(s); for i:=1 to n do begin ans:=(ans+a[i,s].f) mod 20123; q:=(a[i,s].f+num[i]-1) mod num[i] +1; //q:=a[i,s].f mod num[i] + num[i]; for j:=a[i,s].t to q-1 do repeat s:=(s+1)mod m; until a[i,s].t=1; end; writeln(ans); close(input); close(output); end.