import java.util.Scanner;
/**
* @author ddd
* @create 2020-03-11 16:49
**/
public class MinTree {
private static int INF=99999999;
private static int N=100;
private static boolean[] s=new boolean[N];
private static int[] closest=new int[N];
private static int[] lowcost=new int[N];
private static void Prim(int n,int u0,int c[][]) {
s[u0] = true;
int i, j;
for (i = 1; i <= n; i++) {
if (i != u0) {
lowcost[i] = c[u0][i];
closest[i] = u0;
s[i]=false;
}
else {
s[i]=true;
lowcost[i] = 0;
}
}
for (i = 1; i <= n; i++) {
int temp=INF;
int t = u0;
for (j = 1; j <= n; j++) {
if ((!s[j]) && (lowcost[j] < temp)) {
t = j;
temp = lowcost[j];
}
}
if (t == u0) {
break;
}
s[t] = true;
for (j = 1; j <= n; j++) {
if ((!s[j]) && (c[t][j] < lowcost[j])) {
lowcost[j] = c[t][j];
closest[j] = t;
}
}
}
}
public static void main(String[] args) {
int n,m,u,v,w;
int[][] c=new int[N][N];
// System.out.println("请输入节点数n和边数m");
Scanner scanner=new Scanner(System.in);
n=scanner.nextInt();
m=scanner.nextInt();
int u0=scanner.nextInt();
int sumcost=0;
for(int i=0;i<=n;i++){
for(int j=0;j<=n;j++){
c[i][j]=INF;
}
}
// System.out.println("输入节点数U,V和边值W");
for(int i=1;i<=m;i++){
u=scanner.nextInt();
v=scanner.nextInt();
w=scanner.nextInt();
c[u][v]=w;
c[v][u]=w;
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// System.out.println("c[i][j] = " + c[i][j]);
// }
// }
// System.out.println("输入任意一节点u0");
// u0=scanner.nextInt();
Prim(n,u0,c);
int max=0;
for(int i=1;i<=n;i++){
sumcost+=lowcost[i];
if(max<=lowcost[i]){
max=lowcost[i];
}
}
System.out.println(sumcost);
}
}