#include <bits/stdc++.h>
using namespace std;
set<int> remaining;
set<pair<long long int, long long int> > edge;
int cur = 1;
int cmp[300011];
int bfs(int v) {
  int cnt = 0;
  queue<int> q;
  q.push(v);
  vector<int> second;
  while (q.size()) {
    cnt++;
    v = q.front();
    q.pop();
    cmp[v] = cur;
    second.clear();
    for (auto x : remaining) {
      if (!edge.count({x, v})) {
        second.push_back(x);
      }
    }
    for (auto x : second) {
      remaining.erase(x);
      q.push(x);
    }
  }
  return cnt;
}
int main() {
  int n, m, k, u, v;
  cin >> n >> m >> k;
  for (int j = 0; j < m; j++) {
    cin >> u >> v;
    edge.insert({u, v});
    edge.insert({v, u});
  }
  for (int i = 2; i <= n; i++) remaining.insert(i);
  int cnt = 0;
  while (remaining.size()) {
    int v = *remaining.begin();
    remaining.erase(v);
    cnt += bfs(v);
    cur++;
  }
  set<int> q;
  int w = 0;
  for (int i = 2; i <= n; i++) {
    if (!edge.count({1, i})) {
      q.insert(cmp[i]);
      w++;
    }
  }
  if (q.size() <= k and q.size() > 0 and cnt + 1 == n and
      q.size() == cur - 1 and w >= k) {
    cout << "possible";
  } else {
    cout << "impossible";
  }
}
