#include <bits/stdc++.h>
using namespace std;
const int maxN(3e5 + 10);
typedef int i_N[maxN];
int N, M, K, Ccpn, IT[maxN * 4];
i_N cpn, mark;
vector<int> adj[maxN];
void update(const int k, const int l, const int r, const int i, const int v) {
  if (i < l || i > r) return;
  if (l == r) {
    IT[k] += v;
    return;
  }
  const int mid((l + r) / 2);
  update(k * 2, l, mid, i, v);
  update(k * 2 + 1, mid + 1, r, i, v);
  IT[k] = IT[k * 2] + IT[k * 2 + 1];
}
void get_out(const int k, const int l, const int r, const int i, const int j,
             queue<int> &A) {
  if (j < l || i > r) return;
  if (IT[k] == 0) return;
  if (l == r) {
    A.push(l);
    IT[k] = 0;
    return;
  }
  const int mid((l + r) / 2);
  get_out(k * 2, l, mid, i, j, A);
  get_out(k * 2 + 1, mid + 1, r, i, j, A);
  IT[k] = IT[k * 2] + IT[k * 2 + 1];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> N >> M >> K;
  int C(0);
  for (int i = 0; i < M; i++) {
    int u, v;
    cin >> u >> v;
    if (v != 1) adj[u].push_back(v);
    if (u != 1) adj[v].push_back(u);
    C += u == 1 || v == 1;
  }
  if (K + C > N - 1) {
    cout << "impossible";
    return 0;
  }
  for (int u = 1; u <= N; u++) {
    adj[u].push_back(0);
    adj[u].push_back(N + 1);
    sort(adj[u].begin(), adj[u].end());
  }
  for (int i = 2; i <= N; i++) update(1, 1, N, i, 1);
  {
    for (int u = 2; u <= N; u++)
      if (!cpn[u]) {
        ++Ccpn;
        queue<int> bfs_node;
        get_out(1, 1, N, u, u, bfs_node);
        while (!bfs_node.empty()) {
          const int u(bfs_node.front());
          bfs_node.pop();
          cpn[u] = Ccpn;
          for (int i = 0; i < (int)adj[u].size() - 1; i++)
            if (adj[u][i] + 1 <= adj[u][i + 1] - 1) {
              const int l(adj[u][i] + 1), r(adj[u][i + 1] - 1);
              get_out(1, 1, N, l, r, bfs_node);
            }
        }
      }
  }
  for (int v = 2; v <= N; v++)
    if (adj[1][lower_bound(adj[1].begin(), adj[1].end(), v) - adj[1].begin()] !=
        v) {
      if (!mark[cpn[v]] && K > 0) {
        mark[cpn[v]] = 1;
        K--;
      }
    }
  for (int i = 1; i <= Ccpn; i++)
    if (!mark[i]) {
      cout << "impossible";
      return 0;
    }
  cout << "possible";
}
