小样例过了。
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int bo;
int x;
}a[10005][105];
int b[10005];
inline int in(){
int x=1,y=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')x=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
y=y*10+ch-'0';
ch=getchar();
}
return x*y;
}
inline void out(int n){
if(n<0)putchar('-'),n*=-1;
if(n>9)out(n/10);
putchar (n%10+'0');
}
int main(){
int n=in(),m=in();
for(int i=1;i<=n;++i){
for(int j=0;j<m;++j){
a[i][j].bo=in();
a[i][j].x=in();
}
}
int h=in();
int ans=0;
for(int i=1;i<=n;++i){
int cnt=0,sum=0;
ans=(ans+a[i][h].x)%20123;
if(a[i][h].bo==1)continue;
for(int j=0;j<m;++j){
if(a[i][j].bo==1)++sum;
}
int hh=a[i][h].x;
hh%=sum;
// printf("%d ",hh);
for(int j=h;;j=(j+1)%m){
if(a[i][j].bo==1)++cnt;
if(cnt>=hh){
h=j;
break;
}
}
}
out(ans%20123);
return 0;
}