#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 10;
int n, m, k;
set<int> tar;
set<int> v[maxn];
bool vis[maxn];
int bfs(int st) {
  int flag = 0;
  vis[st] = true;
  queue<int> q;
  q.push(st);
  vector<int> e;
  while (!q.empty()) {
    st = q.front();
    q.pop();
    for (set<int>::iterator it = tar.begin(); it != tar.end(); it++) {
      if (*it != st && !vis[*it] && !v[st].count(*it)) {
        q.push(*it);
        e.push_back(*it);
        vis[*it] = true;
      }
    }
    if (!v[st].count(1)) flag = 1;
    for (int i = 0; i < e.size(); i++) tar.erase(e[i]);
    e.clear();
  }
  return flag;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  int num1 = n - 1;
  for (int i = 1; i <= m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    v[a].insert(b);
    v[b].insert(a);
    if (a == 1 || b == 1) num1--;
  }
  if (num1 < k) {
    printf("impossible\n");
    return 0;
  }
  for (int i = 2; i <= n; i++) tar.insert(i);
  memset(vis, false, sizeof(vis));
  for (int i = 2; i <= n; i++) {
    if (!vis[i]) {
      if (bfs(i) == 0) {
        printf("impossible\n");
        return 0;
      }
    }
  }
  if (tar.size() > k)
    puts("impossible");
  else
    puts("possible");
  return 0;
}
