#include <bits/stdc++.h>
using namespace std;
const int maxn = 50005;
int n, m;
long long g, s;
int fa[205];
struct fuck {
  int u, v;
  long long g, s;
} ed[maxn];
int fin(int x) {
  if (x != fa[x]) {
    fa[x] = fin(fa[x]);
  }
  return fa[x];
}
bool cmp(fuck a, fuck b) {
  if (a.g != b.g) {
    return a.g < b.g;
  }
  return a.s < b.s;
}
bool cmp1(int a, int b) { return ed[a].s < ed[b].s; }
void init() {
  for (int i = 1; i <= n; i++) fa[i] = i;
}
fuck sta[205];
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> m >> g >> s;
  for (int i = 0; i < m; i++) {
    cin >> ed[i].u >> ed[i].v >> ed[i].g >> ed[i].s;
  }
  sort(ed, ed + m, cmp);
  memset(sta, -1, sizeof sta);
  long long ans = 0x3f3f3f3f3f3f3f3f;
  int len = 0;
  for (int i = 0; i < m; i++) {
    init();
    sta[len] = ed[i];
    for (int j = len; j > 0; j--) {
      if (sta[j].s < sta[j - 1].s) swap(sta[j], sta[j - 1]);
    }
    int sum = 0;
    for (int j = 0; j <= len; j++) {
      int a = fin(sta[j].u);
      int b = fin(sta[j].v);
      if (a != b) {
        sta[sum++] = sta[j];
        fa[a] = b;
      }
    }
    if (sum == n - 1) {
      ans = min(ans, ed[i].g * g + sta[sum - 1].s * s);
    }
    len = sum;
  }
  if (ans == 0x3f3f3f3f3f3f3f3f) {
    cout << "-1\n";
  } else
    cout << ans << "\n";
  return 0;
}
