#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll int
using namespace std;
ll n,m,k,sum[111],c[111][111],T(7);
struct array{
ll a[111],id;
}A[100010];
ll work(ll x){
ll tmp=0;
if(k==2){
for(ll i=1;i<=m;i++){
tmp+=sum[i]*A[x].a[i];
sum[i]=(sum[i]+A[x].a[i])%k;
}
}
else {
for(ll i=1;i<=m;i++){
for(ll j=1;j<=m;j++){
tmp+=c[i][j]*A[x].a[i]*A[x].a[j];
c[i][j]+=A[x].a[i]*A[x].a[j];
}
}
}
return tmp%m;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
for(ll i=1;i<=n;i++){
for(ll j=1;j<=m;j++){
scanf("%d",&A[i].a[j]);
A[i].a[j]%=k;
}
A[i].id=i;
}
while(T--){
ll pos=-1,Pos=-1;
memset(sum,0,sizeof(sum));
memset(c,0,sizeof(c));
random_shuffle(A+1,A+n+1);
for(ll i=1;i<=n;i++){
if(work(i)!=((i-1)%k)){
pos=i;
break;
}
}
if(pos==-1)continue;
for(ll i=1;i<pos;i++){
ll tmp=0;
for(ll j=1;j<=m;j++){
tmp+=A[i].a[j]*A[pos].a[j];
}
if(tmp%k==0){
Pos=i;
break;
}
}
if(A[pos].id>A[Pos].id)swap(Pos,pos);
pos=A[pos].id,Pos=A[Pos].id;
printf("%d %d\n",pos,Pos);
return 0;
}
cout<<"-1 -1"<<endl;
}