/***************************************************************** Author:lbn187, a konjac TwT Date:2016-03-05 Contest:Bestcoder Algorithm:QAQ ^_^ Orz hzh, NOI gold members, IOI 2016 world champion ^=^ Orz hhw, you are our blue moon, with you will live ^~^ Orz mxh, you are our red sun, without you we'll die ^-^ Orz yizhou, I wish you a successful marriage ^w^ Orz xianyangyu, you can sleep all the time in the game *****************************************************************/ #pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #include #include #include #define fo(i,n) for(int i=0;i=0;i--) #define rep(i,a,n) for(int i=a;i<=n;i++) #define per(i,a,n) for(int i=n;i>=a;i--) #define mjj(i,x) for(int i=fir[x];i;i=ne[i]) #define X first #define Y second #define MAX(a,b) a=max(a,b) #define MIN(a,b) a=min(a,b) #define mp make_pair #define gi(a) scanf("%d",&a); #define gi2(a,b) scanf("%d%d",&a,&b); #define gi3(a,b,c) scanf("%d%d%d",&a,&b,&c); #define gl(a) scanf("%I64d",&a); #define gs(s) scanf("%s",s); #define wi(a) printf("%d\n",a); #define wi2(a,b) printf("%d %d\n",a,b); #define wl(a) printf("%I64d\n",a); #define spr(x) (x*x) #define pi acos(-1) #define CM(a,b) memcpy(a,b,sizeof(b)) #define CL(a) memset(a,0,sizeof(a)) #define N 111111 #define M 1000000007 #define inf 1e9 #define eps 1e-8 using namespace std; typedef long long LL;typedef unsigned long long ULL;typedef double LF;typedef long double LD; typedef pairpii;typedef pairpil;typedef pairpli;typedef pairpll;typedef pairpff; const int xx[]={1,-1,0,0},yy[]={0,0,1,-1};LL pow(LL a,LL b,LL p){LL sum=1;for(a%=p;b;a=a*a%p,b>>=1)if(b&1)sum=sum*a%p;return sum;} char ch;void rd(int &x){for(ch=getchar();ch<'0';ch=getchar());for(x=0;ch>='0';ch=getchar())x=x*10+ch-'0';} LL phi(LL n){LL i,re=n;for(i=2;i*i<=n;i++)if(n%i==0){re=re/i*(i-1);while(n%i==0)n/=i;}if(n>1)re=re/n*(n-1);return re%M;} void exgcd(LL a,LL b,LL &x,LL &y){if(!b){x=1;y=0;return;}exgcd(b,a%b,y,x);y-=x*(a/b);} LL gcd(LL a,LL b){return b==0?a:gcd(b,a%b);} int T,n,m,x,y,i,j,k,h,t,tot,a[N],du[N],la[N*2],ne[N*2],fir[N],mv[N*4];bool v[N]; void ins(int x,int y){ la[++tot]=y;ne[tot]=fir[x];fir[x]=tot;du[y]++; } void bt(int k,int l,int r){ if(l==r){mv[k]=du[l];return;} int mid=l+r>>1;bt(k<<1,l,mid);bt(k<<1|1,mid+1,r); mv[k]=min(mv[k<<1],mv[k<<1|1]); } int get(int k,int l,int r,int x){ if(l==r){ if(mv[k]<=x)return l;else return -1; } int mid=l+r>>1; if(mv[k<<1]<=x)return get(k<<1,l,mid,x); if(mv[k<<1|1]<=x)return get(k<<1|1,mid+1,r,x); return -1; } void cha(int k,int l,int r,int x,int z){ if(l==r){mv[k]=z;return;} int mid=l+r>>1; if(x<=mid)cha(k<<1,l,mid,x,z);else cha(k<<1|1,mid+1,r,x,z); mv[k]=min(mv[k<<1],mv[k<<1|1]); } int main(){ scanf("%d",&T); for(;T--;){ CL(fir);tot=0;CL(du);CL(v);CL(mv);LL S=0; scanf("%d%d%d",&n,&m,&k); for(i=1;i<=m;i++)scanf("%d%d",&x,&y),ins(x,y); bt(1,1,n); for(i=1;i<=n;i++){ x=get(1,1,n,k); S=(S+1ll*i*x)%M; cha(1,1,n,x,1e9);k-=du[x];v[x]=1; for(int j=fir[x];j;j=ne[j]){ du[la[j]]--; if(!v[la[j]])cha(1,1,n,la[j],du[la[j]]); } } printf("%lld\n",S); //fr(i,n)scanf("%d",&a[i]); } }