#include <bits/stdc++.h>
using namespace std;

int N,M,K;
vector<int> ans(111111,0);

vector<int> u_f;
vector<int> siz;
vector<vector<int>> graph(111111);
set<pair<int,int>> block_list;

void init_unionfind(int N){
	for(int i=0;i<N;i++){
		u_f.push_back(i);
		siz.push_back(1);
	}
}

int root(int a){
	if(u_f[a]==a)return a;
	else return u_f[a]=root(u_f[a]);
}

void unite(int a,int b){
	a=root(a);
	b=root(b);
	if(a==b)return;
	siz[a]+=siz[b];
	siz[b]=siz[a];
	u_f[a]=b;
}

bool query(int a,int b){
	return root(a)==root(b);
}

int main(){
	cin >> N >> M >> K;
	
	init_unionfind(N);
	
	for(int i=0;i<M;i++){
		int a,b;
		cin >> a >> b;
		a--;b--;
		graph[a].push_back(b);
		graph[b].push_back(a);
		unite(a,b);
	}
	for(int i=0;i<K;i++){
		int a,b;
		cin >> a >> b;
		a--;b--;
		if(query(a,b)){
			ans[a]--;
			ans[b]--;
		}
	}
	
	for(int i=0;i<N;i++){
		ans[i]+=siz[root(i)]-graph[i].size()-1;
		
		cout << ans[i];
		if(i<N-1)cout << " ";
		else cout << endl;
	}
	
	return 0;
}