#include <bits/stdc++.h>
using namespace std;
struct Edge { int to, id; };
int N,M,K;
vector<vector<Edge>> g;
vector<int> tin, low, isBridge;
int timerDFS=0;
void dfsBridge(int u, int pEdge){
tin[u]=low[u]=++timerDFS;
for(auto e:g[u]){
if(e.id==pEdge) continue;
if(!tin[e.to]){
dfsBridge(e.to,e.id);
low[u]=min(low[u],low[e.to]);
if(low[e.to]>tin[u]) isBridge[e.id]=1;
}else low[u]=min(low[u],tin[e.to]);
}
}
vector<int> comp;
vector<int> compSize;
void dfsComp(int u,int c){
comp[u]=c; compSize[c]++;
for(auto e:g[u]) if(comp[e.to]==-1 && !isBridge[e.id]) dfsComp(e.to,c);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>N>>M>>K;
g.assign(N+1,{});
for(int i=1;i<=M;i++){
int u,v; cin>>u>>v;
g[u].push_back({v,i});
g[v].push_back({u,i});
}
tin.assign(N+1,0); low.assign(N+1,0); isBridge.assign(M+1,0);
for(int i=1;i<=N;i++) if(!tin[i]) dfsBridge(i,-1);
comp.assign(N+1,-1);
int compCnt=0;
for(int i=1;i<=N;i++) if(comp[i]==-1){ compSize.push_back(0); dfsComp(i,compCnt++); }
vector<vector<int>> tree(compCnt);
for(int u=1;u<=N;u++){
for(auto e:g[u]) if(isBridge[e.id]){
int cu=comp[u], cv=comp[e.to];
if(cu!=cv) tree[cu].push_back(cv);
}
}
long long ans=0;
for(int i=0;i<compCnt;i++){
vector<int> dist(compCnt,-1);
queue<int>q;
dist[i]=0; q.push(i);
while(!q.empty()){
int u=q.front(); q.pop();
for(int v:tree[u]) if(dist[v]==-1){
dist[v]=dist[u]+1; q.push(v);
}
}
for(int j=i+1;j<compCnt;j++){
if(dist[j]>=K) ans += 1LL*compSize[i]*compSize[j];
}
}
cout<<ans<<"\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgRWRnZSB7IGludCB0bywgaWQ7IH07CmludCBOLE0sSzsKdmVjdG9yPHZlY3RvcjxFZGdlPj4gZzsKdmVjdG9yPGludD4gdGluLCBsb3csIGlzQnJpZGdlOwppbnQgdGltZXJERlM9MDsKCnZvaWQgZGZzQnJpZGdlKGludCB1LCBpbnQgcEVkZ2UpewogICAgdGluW3VdPWxvd1t1XT0rK3RpbWVyREZTOwogICAgZm9yKGF1dG8gZTpnW3VdKXsKICAgICAgICBpZihlLmlkPT1wRWRnZSkgY29udGludWU7CiAgICAgICAgaWYoIXRpbltlLnRvXSl7CiAgICAgICAgICAgIGRmc0JyaWRnZShlLnRvLGUuaWQpOwogICAgICAgICAgICBsb3dbdV09bWluKGxvd1t1XSxsb3dbZS50b10pOwogICAgICAgICAgICBpZihsb3dbZS50b10+dGluW3VdKSBpc0JyaWRnZVtlLmlkXT0xOwogICAgICAgIH1lbHNlIGxvd1t1XT1taW4obG93W3VdLHRpbltlLnRvXSk7CiAgICB9Cn0KCnZlY3RvcjxpbnQ+IGNvbXA7CnZlY3RvcjxpbnQ+IGNvbXBTaXplOwp2b2lkIGRmc0NvbXAoaW50IHUsaW50IGMpewogICAgY29tcFt1XT1jOyBjb21wU2l6ZVtjXSsrOwogICAgZm9yKGF1dG8gZTpnW3VdKSBpZihjb21wW2UudG9dPT0tMSAmJiAhaXNCcmlkZ2VbZS5pZF0pIGRmc0NvbXAoZS50byxjKTsKfQoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjaW4+Pk4+Pk0+Pks7CiAgICBnLmFzc2lnbihOKzEse30pOwogICAgZm9yKGludCBpPTE7aTw9TTtpKyspewogICAgICAgIGludCB1LHY7IGNpbj4+dT4+djsKICAgICAgICBnW3VdLnB1c2hfYmFjayh7dixpfSk7CiAgICAgICAgZ1t2XS5wdXNoX2JhY2soe3UsaX0pOwogICAgfQogICAgdGluLmFzc2lnbihOKzEsMCk7IGxvdy5hc3NpZ24oTisxLDApOyBpc0JyaWRnZS5hc3NpZ24oTSsxLDApOwogICAgZm9yKGludCBpPTE7aTw9TjtpKyspIGlmKCF0aW5baV0pIGRmc0JyaWRnZShpLC0xKTsKCiAgICBjb21wLmFzc2lnbihOKzEsLTEpOwogICAgaW50IGNvbXBDbnQ9MDsKICAgIGZvcihpbnQgaT0xO2k8PU47aSsrKSBpZihjb21wW2ldPT0tMSl7IGNvbXBTaXplLnB1c2hfYmFjaygwKTsgZGZzQ29tcChpLGNvbXBDbnQrKyk7IH0KCiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IHRyZWUoY29tcENudCk7CiAgICBmb3IoaW50IHU9MTt1PD1OO3UrKyl7CiAgICAgICAgZm9yKGF1dG8gZTpnW3VdKSBpZihpc0JyaWRnZVtlLmlkXSl7CiAgICAgICAgICAgIGludCBjdT1jb21wW3VdLCBjdj1jb21wW2UudG9dOwogICAgICAgICAgICBpZihjdSE9Y3YpIHRyZWVbY3VdLnB1c2hfYmFjayhjdik7CiAgICAgICAgfQogICAgfQoKICAgIGxvbmcgbG9uZyBhbnM9MDsKICAgIGZvcihpbnQgaT0wO2k8Y29tcENudDtpKyspewogICAgICAgIHZlY3RvcjxpbnQ+IGRpc3QoY29tcENudCwtMSk7CiAgICAgICAgcXVldWU8aW50PnE7CiAgICAgICAgZGlzdFtpXT0wOyBxLnB1c2goaSk7CiAgICAgICAgd2hpbGUoIXEuZW1wdHkoKSl7CiAgICAgICAgICAgIGludCB1PXEuZnJvbnQoKTsgcS5wb3AoKTsKICAgICAgICAgICAgZm9yKGludCB2OnRyZWVbdV0pIGlmKGRpc3Rbdl09PS0xKXsKICAgICAgICAgICAgICAgIGRpc3Rbdl09ZGlzdFt1XSsxOyBxLnB1c2godik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yKGludCBqPWkrMTtqPGNvbXBDbnQ7aisrKXsKICAgICAgICAgICAgaWYoZGlzdFtqXT49SykgYW5zICs9IDFMTCpjb21wU2l6ZVtpXSpjb21wU2l6ZVtqXTsKICAgICAgICB9CiAgICB9CiAgICBjb3V0PDxhbnM8PCJcbiI7Cn0K