#include <bits/stdc++.h>
using namespace std;
const int N = 300005;
int n, m, k;
set<int> G[N];
set<int> tar;
bool vis[N] = {0};
int bfs(int s) {
  queue<int> q;
  q.push(s);
  vis[s] = 1;
  vector<int> tmp;
  tmp.clear();
  int flag = 0;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (set<int>::iterator it = tar.begin(); it != tar.end(); it++) {
      if (*it != u && G[u].count(*it) == 0 && vis[*it] == 0) {
        vis[*it] = 1;
        tmp.push_back(*it);
        q.push(*it);
      }
    }
    if (G[u].count(1) == 0) flag = 1;
    for (int i = 0; i < tmp.size(); i++) tar.erase(tmp[i]);
    tmp.clear();
  }
  return !flag;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 2; i <= n; i++) tar.insert(i);
  int dg = n - 1;
  for (int i = 1; i <= m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    G[a].insert(b);
    G[b].insert(a);
    if (a == 1 || b == 1) dg--;
  }
  if (dg < k) {
    puts("impossible");
    return 0;
  }
  for (int i = 1; i <= n; i++) {
    if (vis[i] == 0 && tar.count(i)) {
      if (bfs(i)) {
        puts("impossible");
        return 0;
      }
    }
  }
  if (tar.size() > k)
    puts("impossible");
  else
    puts("possible");
  return 0;
}
