#include <bits/stdc++.h>
#pragma GCC optimize("O2")
using namespace std;
inline long long input() {
  long long n;
  cin >> n;
  return n;
}
const int MAXN = 1e6 + 10;
const int MOD = 1e9 + 7;
const int MOD2 = 998244353;
const long long INF = 8e18;
long long pw(long long a, long long b) {
  return (!b ? 1
             : (b & 1 ? (a * pw(a * a % MOD, b / 2)) % MOD
                      : pw(a * a % MOD, b / 2)));
}
long long n, m, k, cnt, D[MAXN];
map<pair<long long, long long>, long long> mp;
set<long long> s;
void DFS(long long v) {
  long long u;
  s.erase(v);
  set<long long>::iterator it = s.begin();
  while (it != s.end()) {
    u = *it;
    if (!mp[{v, u}]) {
      DFS(u);
    }
    it = s.upper_bound(u);
  }
  return;
}
int main() {
  long long v, u;
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n >> m >> k;
  for (long long i = 0; i < m; i++) {
    cin >> v >> u;
    mp[{v, u}] = mp[{u, v}] = 1;
    D[u]++, D[v]++;
  }
  for (long long i = 2; i <= n; i++) {
    s.insert(i);
  }
  for (long long i = 2; i <= n; i++) {
    if (s.find(i) != s.end()) {
      DFS(i);
      cnt++;
    }
  }
  if (cnt > k) return cout << "impossible", 0;
  cnt = 0;
  for (long long i = 1; i <= n; i++) {
    s.insert(i);
  }
  for (long long i = 1; i <= n; i++) {
    if (s.find(i) != s.end()) {
      cnt++;
      DFS(i);
    }
  }
  if (cnt != 1 || (n - D[1] - 1) < k) {
    return cout << "impossible", 0;
  }
  cout << "possible";
  return 0;
}
