#include <bits/stdc++.h>
using namespace std;
const int N = 300010;
vector<int> g[N];
queue<int> q;
set<int> st;
set<int>::iterator it;
int n, u, v, m, deg[N], k, num = 0;
int V, V2;
bool BFS() {
  for (int i = 2; i <= n; i++) st.insert(i);
  q.push(1);
  int node, cnt = 0;
  while (!q.empty()) {
    node = q.front();
    q.pop();
    cnt++;
    for (int newnode = 1; newnode <= n; newnode++) {
      it = st.lower_bound(newnode);
      if (it == st.end()) break;
      newnode = *it;
      if (binary_search(g[node].begin(), g[node].end(), newnode) == false) {
        st.erase(it);
        q.push(newnode);
        if (node == 1) {
          V++;
        }
      }
    }
  }
  return (cnt == n);
}
void DFS(int node) {
  set<int>::iterator it;
  st.erase(st.find(node));
  for (int newnode = 1; newnode <= n; newnode++) {
    it = st.lower_bound(newnode);
    if (it == st.end()) break;
    newnode = *it;
    if (binary_search(g[node].begin(), g[node].end(), newnode) == false) {
      DFS(newnode);
      if (node == 1) V2++;
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for (int i = 1; i <= n; i++) {
    sort(g[i].begin(), g[i].end());
    deg[i] = n - 1 - (int)g[i].size();
  }
  if (!BFS() || V < k) {
    puts("impossible");
    return 0;
  }
  for (int i = 1; i <= n; i++) st.insert(i);
  DFS(1);
  if (V2 <= k)
    puts("possible");
  else
    puts("impossible");
  return 0;
}
