#include<bits/stdc++.h>
using namespace std;
const int N=5e4+5,M=5e5+5;
int n,m,s,k,p[N];
struct edge{
int u,v,w;
}a[M];
int cmp(edge x,edge y){
if(x.w!=y.w){
return x.w<y.w;
}
return (x.u==s||x.v==s)>(y.u==s||y.v==s);
}
int find(int x){
if(p[x]==x){
return x;
}
return p[x]=find(p[x]);
}
void merge(int u,int v){
p[find(u)]=find(v);
}
pair<int,int>calc(int mid){
for(int i=1;i<=m;i++){
if(a[i].u==s||a[i].v==s){
a[i].w+=mid;
}
}
for(int i=1;i<=n;i++){
p[i]=i;
}
int sum=0,cnt=0;
sort(a+1,a+m+1,cmp);
for(int i=1;i<=m;i++){
if(find(a[i].u)!=find(a[i].v)){
merge(a[i].u,a[i].v),sum+=a[i].w,cnt+=(a[i].u==s||a[i].v==s);
}
}
for(int i=1;i<=m;i++){
if(a[i].u==s||a[i].v==s){
a[i].w-=mid;
}
}
for(int i=1;i<=n;i++){
if(find(i)!=find(1)){
cnt=-1;
}
}
return {sum,cnt};
}
int main(){
cin>>n>>m>>s>>k;
for(int i=1;i<=m;i++){
cin>>a[i].u>>a[i].v>>a[i].w;
}
int l=-3e4,r=3e4,ans=-1;
while(l<=r){
int mid=(l+r)>>1;
if(calc(mid).second>=k){
l=mid+1,ans=calc(mid).first-mid*k;
}
else{
r=mid-1;
}
}
if(ans==-1){
cout<<"Impossible";
}
else{
cout<<ans;
}
}