import java.util.*; public class Main { public static void main(String args[]) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int m=sc.nextInt(); int x[][]=new int[n][m]; int flat[][]=new int[n][m]; //是否有楼梯数组 for(int i=0;i<n;i++) for(int j=0;j<m;j++) { flat[i][j]=sc.nextInt(); x[i][j]=sc.nextInt(); } int t=sc.nextInt(); //从t号房间开始 long s=0; for(int i=0;i<n;i++) { s+=x[i][t]; //s为每层第一个房间的x的和 int a=0,b=0; for(int j=0;j<m;j++) { if(flat[i][j]==1) // 查询这层有楼梯的房间存到a a++; } b=x[i][t]%a; //用求余去掉x重复循环的时间 if(b==0) //当余数为0时,x为a的倍数 所以直接b=a b=a; for(int j=t;j<m;j++) { //从t开始找出有楼梯的房间 if(flat[i][j]==1) b--; if(b==0) { t=j; //每层第一个房间号为t break; } if(j==m-1) //索引到最后一个数时 回到开头 j=-1; } } System.out.println(s%20123); } } /************************************************************** Problem: 1665 User: admin Language: Java Result: Time Limit Exceed ****************************************************************/