#include <bits/stdc++.h>
 
typedef long long ll;
//std::mt19937 rnd((unsigned int) std::chrono::steady_clock::now().time_since_epoch().count());

int main() {
//	freopen("1.in", "r", stdin);
//	freopen("1.out", "w", stdout);
	std::ios::sync_with_stdio(false);
	srand(time(0));
	int N, M, P;
	std::cin >> N >> M >> P;
	std::vector<ll> a(N);
	for (int i = 0; i < N; ++ i) {
		std::string s;
		std::cin >> s;
		for (int j = 0; j < M; ++ j) {
			if (s[j] == '1') {
				a[i] |= (1ll << j);
			}
		}
	}
	std::vector<int> lis(N);
	std::iota(lis.begin(), lis.end(), 0);
//	std::shuffle(lis.begin(), lis.end(), rnd);
	std::random_shuffle(lis.begin(), lis.end());
//	int len = std::min(200, N);
	int mx = 0;
	std::string ans(M, '0');
	for (int cas = 0; cas < std::min(N, 200); ++ cas) {
//		ll now = a[cas];
		int me = lis[cas];
		std::vector<int> b;
		for (int i = 0; i < M; ++ i) {
//			if (now & (1ll << i)) {
			if ((a[me] >> i) & 1) {
				b.push_back(i);
			}	
		}
		int sz = (int)b.size();
		std::vector<int> cnt(1 << sz);
		for (int i = 0; i < N; ++ i) {
			int p = 0;
			for (int j = 0; j < sz; ++ j) {
//				if (a[i] & (1ll << b[j])) {
				if ((a[i] >> b[j]) & 1) {
					p |= (1 << j);
				}
			}
			++ cnt[p];
		}
		for (int i = 0; i < sz; ++ i) {
			for (int j = 0; j < (1 << sz); ++ j) {
				if (j & (1 << i)) {
					cnt[j ^ (1 << i)] += cnt[j];
				}
			}
		}
		
		for (int i = 0; i < (1 << sz); ++ i) {
			if (cnt[i] * 2 >= N && __builtin_popcount(i) > mx) {
				mx = __builtin_popcount(i);
				ans = std::string(M, '0');
				for (int j = 0; j < sz; ++ j) {
					if (i & (1 << j)) {
						ans[b[j]] = '1';
					}
				}
			}
		}
	}
	std::cout << ans << '\n';
	return 0;
}