#include <bits/stdc++.h>
using namespace std;
//假設有一百個節點
const int N=100;
int find( vector<int>&p,int x){
return x==p[x]?p[x]:p[x]=find(p,p[x]);
}
int main(){
vector<int>p(N,-1);
int n,m,a,b,u,v;
cin>>n>>m>>a>>b;
//節點初始化 ,爲自己的索引
for(int i=0;i<n;i++){
p[i]=i;
}
//建立並查集
for(int i=1;i<=m;i++){
cin>>u>>v;
int fu=find(p,u);
int fv=find(p,v);
if(fu!=fv){
p[fu]=fv;
}
}
int cnt=0;
//計算有幾個連通量
for(int i=0;i<n;i++){
if(p[i]==i){
cnt++;
}
}
int ans=b+b+(cnt-1)*b+cnt*a;
printf("%d\n",ans);
return 0;
}