/*
分析:
找规律+快速幂取余。
详细的看代码吧。
2013-07-17
*/
分析:
找规律+快速幂取余。
详细的看代码吧。
2013-07-17
*/
#include"iostream"
#include"cstdio"
#include"cmath"
#include"cstring"
#include"algorithm"
using namespace std;
const int N=2005;
const int mod=100000007;
int n,m,k;
struct node{
int x,y;
}E[N];
int cmp(node n1,node n2)
{
if(n1.x!=n2.x) return n1.x<n2.x;
return n1.y<n2.y;
}
int sp(__int64 a,__int64 b)
{
__int64 ans=1;
while(b)
{
if(b%2) ans=(ans*a)%mod;
a=(a*a)%mod;
b/=2;
}
return (int)ans;
}
int main()
{
int i;
int mid;
int cnt,ans;
while(scanf("%d%d%d",&n,&m,&k)!=-1)
{
mid=n/2;
if(n%2) mid++;
for(i=1;i<=m;i++)
{
scanf("%d%d",&E[i].x,&E[i].y);
//朝一个方向映射一下,我取x、y尽量小的方向
E[i].x++;E[i].y++;
if(E[i].x>mid) E[i].x=n+1-E[i].x;
if(E[i].y>mid) E[i].y=n+1-E[i].y;
if(E[i].x<E[i].y) E[i].x^=E[i].y^=E[i].x^=E[i].y;
}
sort(E+1,E+m+1,cmp);
if(n%2) cnt=n + (n*n-1-(n-1)*4)/8; //n为奇数、要考虑对角线和横竖对称轴以及中心,去除这些后、每个点可以映射出8个点
else cnt=n/2 + n*(n-2)/8; //n为偶数、只用考虑对角线,同上
E[0].x=E[0].y=-1;
for(i=1;i<=m;i++) if(E[i].x!=E[i-1].x || E[i].y!=E[i-1].y) cnt--;
ans=sp(k,cnt);
printf("%d\n",ans);
}
return 0;
}