#include <bits/stdc++.h>
//#include "bits/stdc++.h"
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
typedef vector<int> VI;
typedef vector<VI> VVI;//例: VVI dp(10, vector<int>(10, INF);
typedef priority_queue<int, vector<int>, less<int> > QUE_int;
const int INF = 2 * pow(10, 9) + 1;//+1しないとREになるかも(out of rangeになるんかな?? )

vector<int> dx = { -1, 0, 1, 0, -1, -1, 1, 1 };
vector<int> dy = { 0, -1, 0, 1, -1, 1, -1, 1 };

ll max(ll a, ll b) { return (a > b) ? a : b; }
ll min(ll a, ll b) { return (a < b) ? a : b; }

////////////////////////////////////////////////////////////////

// auto mod int
// https://youtu.be/L8grWxBlIZ4?t=9858
// https://youtu.be/ERZuLAxZffQ?t=4807 : optimize
// https://youtu.be/8uowVvQ_-Mo?t=1329 : division
const int mod = pow(10, 9) + 7;
struct mint {
	ll x; // typedef long long ll;
	mint(ll x = 0) :x((x%mod + mod) % mod) {}
	mint operator-() const { return mint(-x); }
	mint& operator+=(const mint a) {
		if ((x += a.x) >= mod) x -= mod;
		return *this;
	}
	mint& operator-=(const mint a) {
		if ((x += mod - a.x) >= mod) x -= mod;
		return *this;
	}
	mint& operator*=(const mint a) {
		(x *= a.x) %= mod;
		return *this;
	}
	mint operator+(const mint a) const {
		mint res(*this);
		return res += a;
	}
	mint operator-(const mint a) const {
		mint res(*this);
		return res -= a;
	}
	mint operator*(const mint a) const {
		mint res(*this);
		return res *= a;
	}
	mint pow(ll t) const {
		if (!t) return 1;
		mint a = pow(t >> 1);
		a *= a;
		if (t & 1) a *= *this;
		return a;
	}

	// for prime mod
	mint inv() const {
		return pow(mod - 2);
	}
	mint& operator/=(const mint a) {
		return (*this) *= a.inv();
	}
	mint operator/(const mint a) const {
		mint res(*this);
		return res /= a;
	}
};
// combination mod prime
// https://www.youtube.com/watch?v=8uowVvQ_-Mo&feature=youtu.be&t=1619
struct combination {
	vector<mint> fact, ifact;
	combination(int n) :fact(n + 1), ifact(n + 1) {
		assert(n < mod);
		fact[0] = 1;
		for (int i = 1; i <= n; ++i) fact[i] = fact[i - 1] * i;
		ifact[n] = fact[n].inv();
		for (int i = n; i >= 1; --i) ifact[i - 1] = ifact[i] * i;
	}
	mint operator()(int n, int k) {
		if (k < 0 || k > n) return 0;
		return fact[n] * ifact[k] * ifact[n - k];
	}
};


////////////////////////////////////////////////////////////////


int main(void) {
	int N, M, K;
	cin >> N >> M >> K;
	vector<int> A(M), B(M), C(K), D(K);
	for(int i=0; i<M; i++) cin >> A[i] >> B[i];
	for(int i=0; i<K; i++) cin >> C[i] >> D[i];

	VVI friends(N, vector<int>());
	for(int i=0; i<M; i++){
		A[i]--; B[i]--;
		friends[A[i]].push_back(B[i]);
		friends[B[i]].push_back(A[i]);
	}

	VVI blocks(N, vector<int>());
	for(int i=0; i<K; i++){
		C[i]--; D[i]--;
		blocks[C[i]].push_back(D[i]);
		blocks[D[i]].push_back(C[i]);
	}

	// for(int i=0; i<friends.size();i++){
	// 	cout << "person " << i << ": ";
	// 	for(int j=0; j<friends[i].size(); j++){
	// 		cout << friends[i][j] << " ";
	// 	}
	// 	cout << endl;
	// }

	int g_num = 0;//group数
	vector<int> g_id(N, -1);//g_id[i]: 人iが属するgroup_id
	//dfsでgroup_idを付ける
	for(int i=0 ;i<N; i++){
		if(g_id[i] != -1) continue;
		
		g_id[i] = g_num;
		g_num++;
		stack<P> st;// first:注目する子ノード, second:子ノードの親
		st.push(P(i, -1));

		while(!st.empty()){
			int child = st.top().first;
			int parent = st.top().second;
			st.pop();

			for(int j=0; j<friends[child].size(); j++){
				//cout << "i: " << i << " friends[" << child<<"]["<<j<<"]: "<< friends[child][j] << " g_id["<<j<<"]: " << g_id[j] << endl;
				if(friends[child][j] == parent) continue;
				if(g_id[friends[child][j]] != -1) continue;
				g_id[friends[child][j]] = g_id[child];
				st.push(P(friends[child][j], child));

			}
		}
	}

	vector<int> num_in_each_g(g_num, 0);
	for(int i=0; i<N; i++){
		num_in_each_g[g_id[i]]++;
	}

	//cout << " g_num: "<< g_num << endl;
	for(int i=0; i<N; i++){
		int ans = num_in_each_g[g_id[i]] - 1 - friends[i].size();
		
		for(int j=0; j<blocks[i].size(); j++){
			if(g_id[i] == g_id[blocks[i][j]]) ans--;
		}
		//cout << " i: " << i << " g_id[i]: " << g_id[i] << " num_in_g: " << num_in_each_g[g_id[i]] << " friends[i].size(): " << friends[i].size() <<" ans: " << ans << endl; 
		
		cout << ans << " ";
	}



}




Measured memory_bytes: 14072