#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const long long MOD=1000000007;

long long qpow(long long x,long long y)
{
    long long res=1;
    while(y)
    {
        if(y&1) res=(res*x)%MOD;
        x=(x*x)%MOD;
        y=y>>1;
    }

    return res;
}

long long n,m,v;
pair<int,int> p[100005];
int main()
{

    freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);

    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

    int T; cin>>T;

    while(T--)
    {
        cin>>n>>m>>v;
        bool flg=0;
        for(int i=0;i<m;i++) cin>>p[i].first>>p[i].second;
        sort(p,p+m);

        long long l=1,r=1,ans=1;
        for(int i=0;i<m;i++)
        {
            
            if(i+1<m&&p[i].first==p[i+1].first&&p[i].second!=p[i+1].second)
            {
                ans=0;
                break;
            }

            long long res=1;
            r=p[i].first;

            if(l<r)
            {
                res=qpow(v*v%MOD,r-l);
                if(i!=0) res=(res-qpow(v,r-l-1)*(v-1)%MOD+MOD)%MOD;
            }

            l=p[i].first;
            ans=(ans*res)%MOD;
        }

        r=n;
        if(l<r) ans=(ans*qpow(v*v%MOD,r-l))%MOD;

        cout<<ans<<"\n";
    }
    return 0;
}