#include <bits/stdc++.h>
using namespace std;
#define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
#define Bit(mask , i) ((mask >> i) & 1)
#define fi first
#define se second
#define _LOG2(nl) 31 - __builtin_clz(nl)
#define c_bit(nl) __builtin_popcount(nl)
#define ii pair<long long , int>
#define lll pair<long long , pair<long long , long long>>
#define lii pair<long long , pair<int , int>>
#define iii pair<long long , pair<int , int>>
#define iiii pair<pair<long long , int> , pair<int , int>>
#define llll pair<pair<__int128 , __int128> , pair<__int128 , __int128>>
#define li pair<long long , int>
#define db long double
#define onBit(mask , i) (mask | (1 << i))
#define offBit(mask , i) (mask & (~(1 << i)))
const int INF = 1e7;
const long long MOD = 1e9 + 7;
const int N = 3e5 + 7;
int n , m , K;
int f[N];
long long pre[N] , L[N] , R[N];
vector<int> a[N];

struct gv{
    int val , id;
};

gv E[N];

bool cmp(gv x , gv y){
    return x.val < y.val;
}

void bfs(){
    memset(f , -1 , sizeof f);
    queue<int> q;
    f[1] = 0;
    q.push(1);

    while(q.size()){
        int u = q.front();
        q.pop();

        for (int v : a[u]) if (f[v] == -1){
            f[v] = f[u] + 1;
            q.push(v);
        }
    }
}

void inp(){
    cin >> n >> m >> K;
    for (int i = 1 ; i <= m ; ++i){
        int u , v;
        cin >> u >> v;
        a[u].push_back(v);
        a[v].push_back(u);
    }

    bfs();
    for (int i = 1 ; i <= n ; ++i){
        E[i].val = f[i];
        E[i].id = i;
    }
    sort(E + 1 , E + n + 1 , cmp);
    for (int i = 1 ; i <= n ; ++i){
        pre[i] = pre[i - 1] + E[i].val;
    }
}

bool check(db T){
    int l = 1 , r = n , mid , pos = 0;
    while (l <= r){
        mid = (l + r) >> 1;
        if ((db)E[mid].val <= T){
            pos = mid;
            l = mid + 1;
        }
        else r = mid - 1;
    }

    return (T * (db)pos - (db)pre[pos] >= (db)K * (db)n);
}

void solve(){
    db l = 0 , r = 1e12 , mid , res = 0;
    while (r - l >= 0.000000001){
        mid = (l + r) / 2.0;
        if (check(mid)){
            res = mid;
            r = mid;
        }
        else l = mid;
    }

    long long num = 0 , den = 0;
    for (int i = 2 ; i <= n ; ++i){
        if ((db)E[i].val > res && !den){
            num = (1LL * K) * (1LL * n) + pre[i - 1];
            den = i - 1;
        }

        if (!den){
            L[E[i].id] = E[i].val;
            R[E[i].id] = 1;
        }
        else{
            L[E[i].id] = num;
            R[E[i].id] = den;
        }
    }

    for (int i = 2 ; i <= n ; ++i){
        cout << L[i] << " " << R[i] << '\n';
    }
}

int main(){
//    freopen("difmax.inp" , "r" , stdin);
//    freopen("difmax.out" , "w" , stdout);
    faster;
    inp();
    solve();
    return 0;
}
