#include <iostream>
#include <iomanip>
#include<math.h>
#include<list>
#include <algorithm>
#include<set>
#include<vector>
#include<math.h>
#include<map>
#include<string>
#include <numeric>
#include <queue>
#include <sstream>
#include <bitset>
#include<stack>

using namespace std;
using ll = long long;
using vll = vector<long long>;
using sll = set<long long>;

template<typename T>
T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }
template<typename T>
T lcm(T a, T b) { return a / gcd(a, b) * b; }

template<typename T>
map<T, T> getPrimeFactor(T n) {
	map<T, T> res;
	for (T i = 2; i * i <= n; ++i) {
		while (n % i == 0) {
			res[i] ++;
			n /= i;
		}
	}
	if (n != 1) res[n] = 1;
	return res;
}

template<typename T>
bool IsPrimeNumber(T num)
{
	if (num <= 2) return true;
	else if (num % 2 == 0) return false;

	double sqrtNum = sqrt(num);
	for (int i = 3; i <= sqrtNum; i += 2)
	{
		if (num % i == 0)
		{
			return false;
		}
	}

	return true;
}

long long modinv(long long a, long long m) {
	long long b = m, u = 1, v = 0;
	while (b) {
		long long t = a / b;
		a -= t * b; swap(a, b);
		u -= t * v; swap(u, v);
	}
	u %= m;
	if (u < 0) u += m;
	return u;
}


#define in(x) cin >> x
#define out(x) cout << x
#define outn(x) cout << x << '\n'
#define outs(x) cout << x << ' '
#define rep(i,s,e) for(ll i=s;i<e;i++)
#define repeq(i,s,e) for(ll i=s;i<=e;i++)


ll pow2(ll n, ll p, ll mod) {
	if (p == 0 || n == 1) {
		return 1;
	}
	else {
		ll ret = pow2(n * n % mod, p / 2, mod);
		if (p % 2 == 1) {
			ret *= n;
		}
		return ret % mod;
	}
}

int main() {
	ll N, M, K;
	ll A, B, C, D;

	std::cin >> N >> M >> K;
	vll ans(N + 1, 0);
	map<ll, ll> label;
	map<ll, vll> member;
	map<ll, ll> size;

	vll no_of_not_candidate(N + 1, 0);
	rep(i, 0, M) {
		std::cin >> A >> B;
		no_of_not_candidate[A]++;
		no_of_not_candidate[B]++;


		if (label[A] == 0) {
			if (label[B] == 0) {
				label[A] = A;
				label[B] = A;
				member[A].push_back(A);
				member[A].push_back(B);
				size[A] += 2;
			}
			else {
				label[A] = label[B];
				member[label[B]].push_back(A);
				size[label[B]]++;
			}
		}
		else {
			if (label[B] == 0) {
				label[B] = label[A];
				member[label[A]].push_back(B);
				size[label[A]]++;
			}
			else if(label[A]!=label[B]) {
				if (size[label[A]] < size[label[B]]) {
					ll tmp_child_label = label[A];
					ll tmp_parent_label = label[B];
					size[tmp_parent_label] += size[tmp_child_label];
					rep(i, 0, size[tmp_child_label]) {
						label[member[tmp_child_label][i]] = tmp_parent_label;
						member[tmp_parent_label].push_back(member[tmp_child_label][i]);
					}
					member[tmp_child_label].clear();
					size[tmp_child_label] = 0;
				}
				else {
					ll tmp_child_label = label[B];
					ll tmp_parent_label = label[A];
					size[tmp_parent_label] += size[tmp_child_label];
					rep(i, 0, size[tmp_child_label]) {
						label[member[tmp_child_label][i]] = tmp_parent_label;
						member[tmp_parent_label].push_back(member[tmp_child_label][i]);
					}
					member[tmp_child_label].clear();
					size[tmp_child_label] = 0;
				}
			}
		}
	}
	rep(i, 0, K) {
		std::cin >> A >> B;

		if (label[A] == label[B]) {
			no_of_not_candidate[A]++;
			no_of_not_candidate[B]++;
		}

	}

	repeq(i, 1, N) {
		std::cout << max(size[label[i]] - 1LL - no_of_not_candidate[i],0LL);
		if (i != N) {
			std::cout << " ";
		}
	}
	std::cout << endl;


	return 0;

}


Measured memory_bytes: 14708