#include <bits/stdc++.h>
using namespace std;
const int N = 301000;
set<int> e[N], un;
int t, q[N];
void add(int u) {
  q[t++] = u;
  un.erase(u);
}
void dfs(int u) {
  t = 0;
  add(u);
  for (int i = 0; i < t; i++) {
    u = q[i];
    int pre = 1;
    while (1) {
      set<int>::iterator x = un.upper_bound(pre);
      if (x == un.end()) break;
      int v = *x;
      pre = v;
      if (e[u].count(v)) continue;
      add(v);
    }
  }
}
int main() {
  int n, m, k, cnt;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    e[a].insert(b);
    e[b].insert(a);
  }
  cnt = 0;
  for (int i = 2; i <= n; i++) un.insert(i);
  for (int i = 2; i <= n; i++) {
    if (un.count(i)) {
      cnt++;
      dfs(i);
      bool flag = 0;
      for (int j = 0; j < t; j++) {
        if (!e[1].count(q[j])) flag = 1;
      }
      if (!flag) {
        puts("impossible");
        return 0;
      }
    }
  }
  if (cnt > k || k > n - 1 - e[1].size()) {
    puts("impossible");
    return 0;
  }
  puts("possible");
  return 0;
}
